日期:2014-05-20  浏览次数:20712 次

java中实现方法调用捕获
JAVA 代码

ClassA ca = new ClassA();
boolean flag = ca.something();//方法调用返回true/false

如何实现对这个方法调用的监控,在执行ca.something()时
可以执行自己的方法,直接返回true/false 
(这个方法是在jar包中,如果建议改源代码的话,请慎重回复)

------解决方案--------------------
用注解,自己去查查资料
------解决方案--------------------
http://www.ibm.com/developerworks/cn/java/j-lo-jse61/index.html
------解决方案--------------------
boolean flag = ca.something();//方法调用返回true/false

如何实现对这个方法调用的监控,在执行ca.something()时
可以执行自己的方法,直接返回true/false 




---------------------
直接boolean flag = true/false不就结了嘛
------解决方案--------------------
可以通过子类继承来重写方法,所以可以用匿名类
Java code
ClassA ca = new ClassA() { //匿名类
    public boolean something() { //重写方法
        return call_other_method(); //调用自己的方法
    }
}
boolean flag = ca.something();//方法调用返回true/false

public boolean call_other_method() {
    //do something 
    return true; //or return false
}

------解决方案--------------------
7楼的方法并没有改源码啊。。。重写并不是改源码。。。不改源码就可这么实现。。要么就改源码重新打jar包。。。别无他法了。。。
------解决方案--------------------
探讨
引用:

7楼的方法并没有改源码啊。。。重写并不是改源码。。。不改源码就可这么实现。。要么就改源码重新打jar包。。。别无他法了。。。


那个方法调用也是在jar中的。 就是在捕获 jar中某个类调用jar的其它类的某个方法,捕获后可以调用自己的方法,实现返回自己的值或者实现监控等等

------解决方案--------------------
如果不想改jar包中的源代码,那就只有想办法在classloader上下功夫了

http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/
------解决方案--------------------
http://cglib.sourceforge.net/xref/samples/Trace.html