想象一下你有一个方面:
@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,我不知道如何做同样的事情。
编辑:欢迎使用其他更简单的方法在执行时拦截方法调用,无需方面。
答案 0 :(得分:1)
从我记得的AspectJ开始,它通过将字节码修改为构建步骤或加载类来将方面“编织”到现有代码中。这些都不能通过main()方法以直接的方式完成。
不直接的方式是使用文档中提到的a custom classloader加载您的应用程序代码。
对于独立应用程序,AspectJ可能仍然是您尝试的最佳方式 - 但使用构建时编织。您的IDE,Ant和Maven都应该支持这一点。官方文档包括how to use the Ant tasks。 Maven插件的文档是here。如果使用shell脚本构建,也可以使用ajc
命令。对于IDE插件,我只是意识到它们已经存在,不熟悉它们的使用。