Java 使用Spring和AspectJ拦截私有方法

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

我试图在私有方法之前执行代码,使用AspectJ的加载时编织和基于Spring引导和注释的配置,我正在努力弄清楚为什么我的方面没有被调用

我的简单观点如下:

@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>