报错(Can not set XXX field XXX to com.sun.proxy)"/>
日常问题记录——Spring启动时,异常报错(Can not set XXX field XXX to com.sun.proxy)
问题
开发过程中,将多个类中共有的方法抽象成一个抽象类Interface.java。在使用Interface.java的实现类Impl.java时,注入代码如下:@Autowiredprivate Impl impl;项目启动后,无法正常启动,报错日志:org.springframework.beans.factory.BeanCreationException: Could not autowire field: private XXX xxx; nested exception is java.lang.IllegalArgumentException: Can not set XXX field xxx to com.sun.proxy.$Proxy64
问题分析
JDK在实现动态代理的,只能针对接口进行代理。对类进行代理时,需要使用到CGLib,此时配置不正确或者写法不正确,就会报错。
解决方案
- 注入时,参数类型使用接口类型
@Autowiredprivate Interface impl;
- 设置容器支持类代理,需要使用到EnableAspectJAutoProxy注解
@Service@EnableAspectJAutoProxy(proxyTargetClass = true)public class Impl implements Interface {}
此时,注入的参数类型可为类类型
@Autowiredprivate Impl impl;
更多推荐
日常问题记录——Spring启动时,异常报错(Can not set XXX field XXX to com.sun.proxy)
发布评论