Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by se

旧城等待, 2022-04-10 06:53 569阅读 0赞

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.

问题描述

Spring Boot 项目,启用事务支持时出现以下错误:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with ‘debug’ enabled.

2018-12-28 09:19:09.467 ERROR 1105 —- [ main] o.s.b.d.LoggingFailureAnalysisReporter :

***************************

APPLICATION FAILED TO START

***************************

Description:

The bean ‘departmentDao’ could not be injected as a ‘com.wanyu.fams.dao.DepartmentDao’ because it is a JDK dynamic proxy that implements:

Action:

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.

相关代码

  1. /**
  2. * Hello world!
  3. * @SpringBootApplication注释是相当于使用 @Configuration,@EnableAutoConfiguration,和@ComponentScan 会去拿起在所有的配置类和属于所述类的包。
  4. */
  5. @SpringBootApplication
  6. @ServletComponentScan // 不使用此注解导致项目访问后出现死循环,估计和Filter有关:at
  7. // com.wanyu.frame.base.AuthFilter.doFilter(AuthFilter.java:71)
  8. // ~[classes/:na]
  9. // @Configuration
  10. // @EnableAutoConfiguration
  11. // @EnableWebMvc // 启用后导致 /loginback 等都返回 404
  12. @EnableTransactionManagement // 启用事务处理
  13. // @MapperScan("com.wanyu.fams.dao")
  14. // @ComponentScan
  15. // @EnableAspectJAutoProxy 不需要此注解,带有@Aspect注解的类就会被织入
  16. // @MapperScan(basePackages = "com.wanyu.fams.mapping")
  17. @EnableAsync
  18. public class FamsApplication extends SpringBootServletInitializer {

也就是添加了一个注解:@EnableTransactionManagement // 启用事务处理,启动的时候就报错了。

解决方法

在 application.properties 或者 application.yml 配置文件中添加配置:

以下为 application.properties 中的配置方法:

  1. #解决问题
  2. #Description:
  3. #The bean 'departmentDao' could not be injected as a 'com.wanyu.fams.dao.DepartmentDao' because it is a JDK dynamic proxy that implements:
  4. #Action:
  5. #Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.
  6. spring.aop.proxy-target-class=true

application.yml 写法有点不同:

  1. spring:
  2. aop:
  3. proxy-target-class: true

失败的尝试

有文章指出:在springboot启动类中添加如下代码,最终解决问题,我尝试失败,错误依旧!

  1. @Bean
  2. @ConditionalOnMissingBean
  3. public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
  4. DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();
  5. daap.setProxyTargetClass(true);
  6. return daap;
  7. }

相关参考:

springboot CGLib 方式实现AOP代理问题

还有另外一种可能是:启动类位置不在同级包下

发表评论

表情:
评论列表 (有 0 条评论,569人围观)

还没有评论,来说两句吧...

相关阅读