我是Annotations的新手,也是StackOverflow的新手,这是我的第一个问题。我正在尝试编写自定义注释,这将有助于我跟踪和记录方法执行。
例如:
class A
{
@Logthis
void methodA();
}
每当执行方法methodA()
时,我想记录一个文件,告诉“我们正在进入A类中的methodA”,当methodA结束时“我们正在退出类A中的methodA”这样的事情。我们有许多类和方法。
我知道这可以使用AspectJ完成。我通过定义切入点和连接点来完成它。但我想使用自定义注释来做到这一点。
如果有人能指导我如何解决这个问题,将会非常有帮助。
提前致谢。
答案 0 :(得分: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
}
}
答案 1 :(得分:1)
您可以使用Log4J。这是一个教程:
http://javakane.blogspot.fr/2012/07/automate-log4j-logging-with-aop-and.html
答案 2 :(得分:0)
您似乎希望推出自己的 aop框架。恕我直言,这不是一个好主意,很多工作已经进入AspectJ
,你将从使用它中受益匪浅。但我怀疑你已经知道了:)奇怪的是你可以使用NO外部罐子,这对于商业软件来说相当严格。
但如果你真的需要这样做,你可以向别人学习。 AspectJ
是开源的,没有什么可以阻止你阅读它并根据你的需要调整它。
对于有限的要求,它可能也不是很复杂。你需要一个java agent
,它可以在加载类和方法时查看注释,并修改它们的字节码以添加日志记录。同样,有很好的库可以帮助这个,但是你不能使用它们。
另一种选择可能是使用jpda。我对此没有经验,但我怀疑它会对性能产生重大影响。