[英]how to find out when a method from an object is called in java
我有两个班,例如A和B。
A的实例创建类B的实例。当调用对象B的特定功能时,A如何知道?
每当执行对象B的特定功能时,对象A就需要知道,但不要更改类B的源代码。这应该在运行时完成。
我猜它可以由Java中的InvocationHandler来完成,但是不确定,也不知道如何去做。
B的装饰者通知A怎么办? http://en.wikipedia.org/wiki/Decorator_pattern
基本上,您必须修饰B
以便decordatedB.someMethod()
首先通知a
,然后调用d.someMethod()
。
如果B
是接口,这很容易,您可以执行以下操作
final B b = new BImpl();
final B decoratedB = new B() {
public void someMethod () {
a.someMethodOfBisCalled();
b.someMethod();
}
};
如果B
是一个类,则可以使用Proxy (非常粗略的草图):
InvocationHandler bInvocationHandler = new BInvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) {
// Check this is someMethod
// a.someMethodOfBIsCalled();
// b.someMethod();
}
};
B decoratedB = (B) Proxy.newProxyInstance(B.class.getClassLoader(),
new Class[] { Foo.class }, bInvocationHandler );
还有其他方法,例如提到的AOP,然后是代码检测等,但我认为您可以很好地满足上述要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.