Spring 添加 AOP 建议时引导应用程序上下文中断

Spring Boot application context broken when adding AOP advices

我正在尝试使用 中的代码作为我自己的 AOP 日志记录的基础。但是,当我添加建议时,应用程序上下文不再加载。

@Aspect
@Component
public class MyLogger {

    /** Handle to the log file */
    private final Log log = LogFactory.getLog(getClass());

    public MyLogger () {}

    @AfterReturning("execution(* org.my.package.*.*(..))")
    public void logMethodAccessAfter(JoinPoint joinPoint) {
        log.info("***** Completed: " + joinPoint.getSignature().getName() + " *****");
        System.out.println("***** Completed: " + joinPoint.getSignature().getName() + " *****");
    }

    @Before("execution(* org.my.package.*.*(..))")
    public void logMethodAccessBefore(JoinPoint joinPoint) {
        log.info("***** Starting: " + joinPoint.getSignature().getName() + " *****");
        System.out.println("***** Starting: " + joinPoint.getSignature().getName() + " *****");
    }
}

异常堆栈,一大堆Could not autowire field:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxxxxx.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)

UserService 是一个完全不相关的 class,如果我注释掉用 @AfterReturning@Before.

注释的方法,一切都会再次运行

存在 AOP 依赖项:

[INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.3.0.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:1.3.0.RELEASE:compile

知道为什么会这样吗?我什至不知道从哪里开始寻找。

您的 bean UserService 现在是一个代理,与注入所需的类型不匹配。 可能的解决方法:

  • 创建接口 UserService 和实现该接口的服务 class
  • 启用基于 CGLIB 的代理 (@EnableAspectJAutoProxy(proxyTargetClass=true))
  • 在编译时编织 aspect。