使用自定义注释创建自己的方面

时间:2012-12-21 10:46:41

标签: java annotations aspects

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

例如:

class A
{

@Logthis

void methodA();

}

每当执行方法methodA()时,我想记录一个文件,告诉“我们正在进入A类中的methodA”,当methodA结束时“我们正在退出类A中的methodA”这样的事情。我们有许多类和方法。

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

如果有人能指导我如何解决这个问题,将会非常有帮助。

提前致谢。

3 个答案:

答案 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)

答案 2 :(得分:0)

您似乎希望推出自己的 aop框架。恕我直言,这不是一个好主意,很多工作已经进入AspectJ,你将从使用它中受益匪浅。但我怀疑你已经知道了:)奇怪的是你可以使用NO外部罐子,这对于商业软件来说相当严格。

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

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

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