Java:如何在不显式注册每个对象的情况下侦听方法调用?

里菲菲

我想监听方法调用,以便在调用周围动态附加附加行为。我已经在带有自定义批注和运行器的JUnit方法上完成了此操作。我正在尝试在标准的Java应用程序上执行此操作。

主要思想是:

@Override
public void beforeInvoke (Object self, Method m, Object[] args){
   Object[] newargs = modifyArgs (args);
   m.invoke (self, newargs);
}

这只是一个抽象的想法,我没有任何具体的示例,但是我很好奇Java中是否有可能。

我发现了一些方法:

java.lang.reflect.Proxy.newProxyInstance(...) 

其中仅为接口定义了代理(但不用于装饰具体类)。似乎与注入模式相似,这是一个不同的关注点。

这里的另一种方法是将工厂模式与ProxyFactory类一起使用。此其他解决方案需要显式调用create()方法,以产生侦听方法调用的对象代理。因此,如果您通过使用类的自然构造函数绕过它,那么它将无法正常工作。如果每次必须创建对象时都必须显式调用工厂,这将非常有约束力。

有办法做到透明吗?像Proxy.newProxyInstance()一样,但也可以在具体的类上工作吗?

谢谢。

数学

嗯,这在Spring框架和面向方面的编程中很常见。由于将构造函数调用委托给Spring,因此Spring放置代理以拦截对实际对象的调用非常容易。

据我所知,拦截呼叫的唯一方法是使用代理。可以采用您提到的方式,也可以使用Spring和AOP。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不显式调用显式构造函数的情况下初始化映射?

如何在不指定类的情况下使用显式类型参数调用Java方法?

如何在不显式调用名称的情况下动态访问 r 矩阵行名称?

如何在不显式指定主键的情况下使用Dapper Extensions将对象插入PostGreSql?

如何在不显式定义方法顺序的情况下验证模拟的顺序?

如何在不遍历数组的情况下对数组中的每个元素调用方法?

如何在不显式指定名称的情况下将JSON键值对投影到列

Jinja2 如何在不显式传递函数的情况下读取函数?

如何在不显式映射结果的情况下转发WSResponse

Dapper如何在不显式打开连接的情况下执行查询?

Kubectl:如何在不显式指定Pod名称的情况下显示Pod日志?

如何在不显式指定TProperty类型的情况下创建Expression <Func <TModel,TProperty >>

C++ 如何在不显式转换的情况下在函数调用中降级类实例?

如何在没有反射和动态代理的情况下简单地显式调用默认方法?

如何在不显示 dtype 的情况下从对象在 Python 中打印?

如何在不使用for循环的情况下将几个列表中的每个项目映射到Java中的对象

如何在不显式声明所有模型的所有者字段的情况下分配Django对象所有权?

如何在不注册对象的情况下访问 StandardItemModel 的数据?

Java如何在不干扰的情况下侦听端口上的流量

如何在不显着增加数据库调用时间的情况下检索 django (DRF) 中的对象列表(包括外键字段数据)

在没有显式调用的情况下如何调用'actionPerformed'方法?

如何在没有调用对象的情况下使用在另一个类中定义的方法?

如何在不声明 ServletContextEvent 类的对象的情况下使用事件变量来调用方法 getServletContext?

如何在不等待每个父函数调用的情况下使用 python async def

如何在不显示文档的情况下编写段落

如何在不显示输出的情况下运行链接

如何在没有显式路径的情况下启用bash中的程序调用?

C#如何在不使用值的情况下显式调用getter

如何在不检查每个对象的情况下检查2D碰撞