SpringAOP创建beans自动连接问题

SpringAOP创建beans自动连接问题,spring,aspectj,spring-aop,Spring,Aspectj,Spring Aop,例外情况: @Aspect @Component public class ResponseTimeLoggerAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass().getCanonicalName()); @Around("requestHandlerMethod()") public void logResponseTime(ProceedingJoinPoin

例外情况:

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

}
如果我通过从
ApplicationConfig
注释掉
@enableSpectjautoproxy
来禁用aspect,它不会抛出任何异常,但不会执行aspectJ建议(如预期的那样)


在我看来,通过启用aspectJ,Spring认识到该建议适用于
JMSMessageListener
,因此它在其周围创建了一个代理,这就是为什么Spring无法自动连接
JMSMessageListener
bean的原因,因为现在bean不在那里,但该bean上的代理在那里。

正如@Evgeni正确指出的那样,它通过更改

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: {}

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


此外,目标类必须具有默认构造函数。这是基于CGLIB的代理工作所必需的。

尝试添加代理目标
@enableSpectJautoproxy(proxyTargetClass=true)
@Evgeni它工作了。还有一个问题。我在
JMSMessageListener
中有两种方法,即
public void onMessage(Message Message){…}
public void handleFriendOfEvent(Message Message){…}
。我只想对以
handle
开头的方法应用切入点。。但是这个切入点不起作用
@pointcut(“execution(*com.jms.JMSMessageListener.handle*(..)”)
但是这个切入点起作用
@pointcut(“execution(*com.jms.JMSMessageListener.*(..)”
但是在
onMessage()
方法上。很抱歉,无法帮助解决第二个问题
handle*(..)
在我看来没问题……您可以接受自己的答案并结束问题。
@EnableAspectJAutoProxy
@EnableAspectJAutoProxy(proxyTargetClass=true)