我想监听方法调用,以便在调用周围动态附加附加行为。我已经使用自定义注释和运行程序在 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(...)
其中代理仅为接口定义(但不用于装饰具体类)。它看起来与注入模式相似,但有不同的关注点。
另一种方法here https://stackoverflow.com/questions/3291637/alternatives-to-java-lang-reflect-proxy-for-creating-proxies-of-abstract-classes将工厂模式与 ProxyFactory 类一起使用。另一种解决方案需要显式调用 create() 方法来生成侦听方法调用的对象代理。因此,如果您通过使用类的自然构造函数来绕过它,它就不起作用。如果每次必须创建对象时都必须显式调用工厂,那么这是非常有限制的。
有没有办法做到透明?
类似于 Proxy.newProxyInstance() 但也适用于具体类?
Thanks.
嗯,这在 Spring 框架和面向方面编程中很常见。由于您将构造函数调用委托给 Spring,因此 Spring 可以很容易地放置代理来拦截对实际对象的调用。
据我所知,拦截呼叫的唯一方法是使用代理。无论是按照你提到的方式还是使用 Spring 和 AOP。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)