在独立应用程序中简单使用AspectJ

时间:2011-11-15 20:14:28

标签: java aspectj interceptor

想象一下你有一个方面:

@Aspect
public class MyAspect {
    @Pointcut("whatever")
    public void anyAnnotation() {}

    @Before("anyAnnotation()")
    public void anyComponentAdvice(JoinPoint joinPoint) {
        System.out.println("DONE");
    }
}

你有一个简单的应用程序:

public class MyClass {
    public static void main(String[] args) {
        // ASPECTJ INITIALIZATION BLOCK
        // rest of the code
    }
}

您需要将哪些代码放入“aspectj初始化块”中,以便应用程序自动识别和应用这些方面?

使用Spring AOP等一些框架可以使用<aop:aspectj-autoproxy/>,但是如果没有Spring,我不知道如何做同样的事情。

编辑:欢迎使用其他更简单的方法在执行时拦截方法调用,无需方面。

1 个答案:

答案 0 :(得分:1)

从我记得的AspectJ开始,它通过将字节码修改为构建步骤或加载类来将方面“编织”到现有代码中。这些都不能通过main()方法以直接的方式完成。

不直接的方式是使用文档中提到的a custom classloader加载您的应用程序代码。

对于独立应用程序,AspectJ可能仍然是您尝试的最佳方式 - 但使用构建时编织。您的IDE,Ant和Maven都应该支持这一点。官方文档包括how to use the Ant tasks。 Maven插件的文档是here。如果使用shell脚本构建,也可以使用ajc命令。对于IDE插件,我只是意识到它们已经存在,不熟悉它们的使用。