我想知道如何 - 如果可能的话 - 反映在执行期间在方法内执行的方法调用。我对外部方法调用(即其他类中的方法)或调用某些特定方法(如getDatabaseConnection())特别感兴趣。
我的目的是监视预定义对象在方法内的操作,并在满足某些特定条件时执行其他代码,例如使用特定值调用某些方法。监视器将完全是外部类或一组类,除了反射之外别无法直接访问要监视的对象。
答案 0 :(得分:2)
Aspect J将解决您的问题。
尝试定义这样的切入点:
pointcut profilling(): execution(public * *(..)) && (
within(com.myPackage..*) ||
通过这种方式,您将捕获com.myPackage包中所有公共方法的所有调用。在您需要的子句中添加尽可能多的内容。
然后添加以下代码:
Object around(): profilling() {
//Do wherever you need before method call
proceed();
//Do wherever you need after method call
}
如果您想了解有关aspectJ的更多信息,请遵循此guide。
答案 1 :(得分:1)
我希望BCEL能够做到这一点。来自网站:
字节代码工程库是 旨在为用户提供方便 分析,创造和分析的可能性 操纵(二进制)Java类文件 (以.class结尾的那些)。
“分析”部分是重要的一点。 JavaDoc在网站上是不可见的(据我所见),所以我不能轻易确定它是否会对你有所帮助,但这是一个合理的起点。
答案 2 :(得分:1)
BCEL应该提供这种能力,但是......
...你的要求听起来很像面向方面编程(AOP),所以你也应该看看AspectJ(Eclipse tooling)。
AspectJ的主要优势在于它提供了一种精心设计的方式来表达您的特定条件。