Spring @Async AdviceMode.ASPECTJ触发Bean创建错误

时间:2018-10-03 09:40:19

标签: java spring spring-boot aop aspectj

在迁移到spring boot 2时解决了这个问题。我有这样的配置类:

@Configuration
@EnableScheduling
@EnableAsync(mode = AdviceMode.ASPECTJ)
public class AsyncConfig implements SchedulingConfigurer, AsyncConfigurer
{
   // ...
}

问题是当我设置mode = AdviceMode.ASPECTJ时,我在创建自定义bean时遇到异常:

    @Bean
    public EhCacheCleaner ehcacheCleaner()
    {
        EhCacheCleaner cacheCleaner = new EhCacheCleaner();
        cacheCleaner.setCacheManagersNames("hibernateCache", "sampleCache");
        return cacheCleaner;
    }

异常:

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'cacheCleanerService'的bean时出错:通过字段'ehcacheCleaner'表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建在类路径资源[com / panbet / externalbet / core / config / AsyncConfig.class]中定义的名称为“ ehcacheCleaner”的bean时出错:找不到匹配的工厂方法:工厂bean 'asyncConfig';工厂方法“ ehcacheCleaner()”。检查是否存在具有指定名称的方法,并且该方法是非静态的。

如果我删除 mode = AdviceMode.ASPECTJ ,则此异常消失,但@Async方法不起作用。例外是:

必须在AnnotationAsyncExecutionAspect上设置BeanFactory才能访问合格的执行程序

如何摆脱这种情况?例外的原因是什么?谢谢。

0 个答案:

没有答案