我有一个由两个子项目组成的项目,它们都是 Spring 项目,每个都有一个 applicationContext.xml。
一个是框架项目(最终成为 JAR),一个是实际应用程序(最终成为 WAR,依赖于 JAR 并将 JAR 的 applicationContext.xml 导入它自己的 applicationContext.xml)。
在框架项目中,我为所有公共方法定义了一个方面。
@Aspect
@Configurable
public class MyAspect {
@Autowired
private SomeBean mBean;
@Pointcut("execution(public * *(..))")
public void anyPublicMethod() {
}
@Before("anyPublicMethod()")
public void checkAuthorization(JoinPoint pJoinPoint) {
mBean.doSomething();
}
}
我已经在框架的applicationContext.xml中激活了AOP(由实际应用项目的applicationContext.xml导入)。
...
<context:spring-configured />
<context:component-scan base-package="com.mypackage" />
<aop:aspectj-autoproxy/>
...
在框架项目中进行测试时,方面会在调用 Spring bean 上的公共方法时按预期执行。
如上所述,框架项目作为依赖项包含在应用程序项目中,但是当在任何 Spring bean 上调用应用程序项目中的匹配方法(任何公共)时,不会执行方面。
我也尝试过使用方面的 XML 配置。这导致相同的行为。