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。
我正在尝试使用
@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。