繁体   English   中英

如何找出在Java中调用对象的方法的时间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM