Java 使用Spring和AspectJ拦截私有方法
我试图在私有方法之前执行代码,使用AspectJ的加载时编织和基于Spring引导和注释的配置,我正在努力弄清楚为什么我的方面没有被调用 我的简单观点如下:Java 使用Spring和AspectJ拦截私有方法,java,spring,aop,aspectj,spring-boot,Java,Spring,Aop,Aspectj,Spring Boot,我试图在私有方法之前执行代码,使用AspectJ的加载时编织和基于Spring引导和注释的配置,我正在努力弄清楚为什么我的方面没有被调用 我的简单观点如下: @Aspect public class LoggingAspect { private static Logger log = LoggerFactory.getLogger(LoggingAspect.class); @Before("execution(private * com.mycompany.MyServiceWi
@Aspect
public class LoggingAspect {
private static Logger log = LoggerFactory.getLogger(LoggingAspect.class);
@Before("execution(private * com.mycompany.MyServiceWithPrivateMethods.*(..))")
public void privateAspect() {
log.warn("#### Private method aspect invoked!");
}
}
我的Spring配置类上还有@EnableLoadTimeWeaving
注释,META-INF/aop.xml中有以下内容:
,然而,Spring论坛上较旧的帖子似乎表明这确实是可能的 我原以为它会起作用,但我也原以为您必须添加aspectjweaver.jar作为javaagent。其中一个假设是错误的?嗨,戴夫,谢谢你的回答。我添加了aspectjweaver.jar
作为一个额外的-javaagent
选项,看起来它现在正在正确编织。根据我对Spring-ref手册(第8.8.4节)的解释,我认为我只需要Spring-instrument.jar。你能解释一下为什么我两个都需要吗?(它也不能使用aspectjweaver.jar
作为解决-javaagent
)使其成为“唯一的”-javaagent
<aspectj>
<weaver options="-verbose">
<!-- only weave classes in our application-specific packages -->
<include within="com.mycompany.*"/>
</weaver>
<aspects>
<!-- weave in just this aspect -->
<aspect name="com.mycompany.LoggingAspect"/>
</aspects>
</aspectj>