gpt4 book ai didi

Spring AOP 使用 bean Autowiring 创建问题

转载 作者:行者123 更新时间:2023-12-02 06:31:25 25 4
gpt4 key购买 nike

@Aspect
@Component
public class ResponseTimeLoggerAspect {

private final Logger logger = LoggerFactory.getLogger(this.getClass().getCanonicalName());

@Around("requestHandlerMethod()")
public void logResponseTime(ProceedingJoinPoint point) {
long startTime = System.currentTimeMillis();
try {
point.proceed();
}
catch (Throwable e) {
}
long timeTaken = System.currentTimeMillis() - startTime;
logger.info(point.getSignature().getName() + " took " + timeTaken + " ms.");
}

@Pointcut("execution(* com.jms.JMSMessageListener.*(..))")
public void requestHandlerMethod() {}
}

@Configuration
@Import({JMSConfig.class, Neo4jConfig.class})
@ComponentScan(basePackageClasses=BeansPackageMarker.class)
@EnableAspectJAutoProxy
public class ApplicationConfig {

}

异常(exception):

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.jms.JMSMessageListener] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

如果我通过从 ApplicationConfig 注释掉 @EnableAspectJAutoProxy 来禁用该方面,它不会抛出任何异常,但不会执行任何方面J建议(如预期)。

在我看来,通过启用aspectJ,Spring认识到该建议适用于JMSMessageListener,因此它围绕它创建一个代理,这就是Spring无法 Autowiring JMSMessageListener的原因code> bean 因为现在该 bean 不存在,但该 bean 上的代理存在。

最佳答案

正如@Evgeni正确指出的那样,它是通过改变来起作用的

@EnableAspectJAutoProxy

@EnableAspectJAutoProxy(proxyTargetClass=true)

它启用基于 CGLIB 的代理(默认情况下启用基于 DynamicJDK 的代理)

目标类还必须有一个默认构造函数。这是基于 CGLIB 的代理工作的要求。

关于Spring AOP 使用 bean Autowiring 创建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25079618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com