3

我是 Annotations 的新手,也是 StackOverflow 的新手,这是我的第一个问题。我正在尝试编写自定义注释,这将帮助我跟踪和记录方法执行。

例如:

class A
{

@Logthis

void methodA();

}

在这里,每当methodA()执行该方法时,我想记录到一个文件,告诉“我们正在 A 类中输入方法 A”,当方法 A 结束时“我们正在 A 类中退出方法 A”类似这样的内容。我们 vil 有许多类和方法。

我知道这可以使用 AspectJ 来完成。我通过定义切入点和连接点来做到这一点。但我想使用自定义注释来做到这一点。

如果有人可以指导我如何去做这将非常有帮助。

提前致谢。

4

3 回答 3

2

使用 AspectJ,您可以执行以下操作:-

创建一个用 @Aspect 注释的 Aspect 类

使用 @Around 注释类中的方法,并定义要在已注释的类上执行的值。您还需要启用 AspectJ 对您的类的代理。

@Aspect
public class LoggerAspect {

    @Around(value = "execution(@you.custom.Annotation * *(..))")
    public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable
    {
        // DO LOGGING HERE
    }

}
于 2012-12-21T11:36:01.940 回答
1

您可以使用 Log4J。这是它的教程:

http://javakane.blogspot.fr/2012/07/automate-log4j-logging-with-aop-and.html

于 2012-12-21T10:55:10.090 回答
0

看来您想推出自己的aop 框架。恕我直言,这不是一个好主意,已经进行了大量工作AspectJ,您将从使用它中受益匪浅。但我怀疑你已经知道了 :) 很奇怪,你可以使用 NO 外部 jar,即使对于商业软件也是相当严格的。

但是如果你真的需要这样做,你可能可以向别人学习。AspectJ是开源的,没有什么能阻止您阅读它并根据您的需要进行调整。

对于有限的要求,它可能也不是很复杂。您需要一个java agent可以在加载类和方法时查看它们的注释并修改它们的字节码以添​​加日志记录。同样,有一些优秀的库可以帮助实现这一点,但可惜你不能使用它们。

另一种选择可能是使用jpda。我没有这方面的经验,但我怀疑它会对性能产生重大影响。

于 2012-12-21T18:27:02.177 回答