反映方法在Java中的操作

时间:2008-10-17 08:51:38

标签: java reflection methods monitoring

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

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

3 个答案:

答案 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),所以你也应该看看AspectJEclipse tooling)。

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