3

我想知道如何——如果可能的话——反映在执行期间在方法内部执行了哪些方法调用。我对外部方法调用(即其他类中的方法)或调用某些特定方法(如 getDatabaseConnection())特别感兴趣。

我的意图是监视方法内预定义对象的操作,并在满足某些特定条件时执行附加代码,例如使用特定值调用某些方法。监视器将是完全外部的类或一组类,除了反射之外无法直接访问要监视的对象。

4

3 回答 3

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 的更多信息,请遵循本指南

于 2008-10-17T14:49:48.543 回答
1

BCEL 应该提供这种能力,但是......

...您的要求听起来很像 Aspect-Oriented Programming (AOP),因此您可能还应该查看AspectJ(使用Eclipse 工具)。

AspectJ 的主要优点是它提供了一种精心设计的方式来表达您的特定条件。

于 2008-10-17T09:20:19.270 回答
1

我希望BCEL能够做到这一点。从网站:

字节码工程库旨在为用户提供方便的可能性来分析、创建和操作(二进制)Java 类文件(以 .class 结尾的文件)。

“分析”部分是这里的重要部分。JavaDoc 在网站上不可见(据我所知),所以我不能轻易确定它是否会对您有所帮助,但这是一个合理的起点。

于 2008-10-17T08:55:16.060 回答