无法自动装配字段:不能到 com.sun.proxy.$Proxy22
Posted
技术标签:
【中文标题】无法自动装配字段:不能到 com.sun.proxy.$Proxy22【英文标题】:Could not autowire field: can't to com.sun.proxy.$Proxy22 【发布时间】:2015-02-16 20:56:58 【问题描述】:Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.cms.service.FolderService com.cms.action.BaseAction.folderService; nested exception is java.lang.IllegalArgumentException: Can not set com.cms.service.FolderService field com.cms.action.BaseAction.folderService to com.sun.proxy.$Proxy22
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:518)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
... 30 more
Caused by: java.lang.IllegalArgumentException: Can not set com.cms.service.FolderService field com.cms.action.BaseAction.folderService to com.sun.proxy.$Proxy22
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:657)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514)
... 32 more
这是我的基本动作
public class BaseAction
@Autowired
protected FolderService folderService;
@Autowired
protected ArticleService fileService;
@Autowired
protected TemplateService themeService;
@Autowired
protected HeadlineService headlineService;
protected final Logger logger = Logger.getLogger(this.getClass());
这就是我的文件夹服务
@Service
public class FolderService
protected final Logger logger = Logger.getLogger(this.getClass());
@Autowired
private FolderDao folderDao;
@Autowired
private AdminFolderDao adminFolderDao;
...................next is the java method
【问题讨论】:
因为这与代理有关,您能否发布您的完整配置并提及您是否进行任何事务管理、AOP 等? 我提取服务接口,没问题,非常感谢 发布您为解决问题所做的一切作为答案并将其标记为已解决或完全删除问题。 问题是如何解决的?请发布答案。 我想你终于找到了摆脱这个问题的方法,但这里给出了解决方案:***.com/questions/36556358/… 【参考方案1】:通常这意味着有一个 AOP 代理委托给您的 bean。例如,如果您使用 @Transaction
注释了您的方法之一。
【讨论】:
如果类需要@Transaction注解,那怎么办? @sendreams 请使用接口而不是实现。见***.com/questions/32579118/…【参考方案2】:通过配置使用 cglib 代理强制 aop 挥动
spring.aop.proxy-target-class=true
帮助。
更多信息请参考this article
【讨论】:
请记住,链接可能会损坏。很高兴您对其进行了简短的注释;考虑直接在您的帖子中添加更多详细信息。【参考方案3】:当实现被代理时,你应该用接口而不是实现来声明成员变量。见spring autowiring fails with @Transactional。
例如,而不是:
@Autowired
protected FolderService folderService;
你应该使用:
@Autowired
protected IFolderService folderService;
其中IFolderService
是FolderService
实现的接口。
【讨论】:
【参考方案4】:将 @Transaction 从您的 DAO 对象移动到 Service 对象。
【讨论】:
以上是关于无法自动装配字段:不能到 com.sun.proxy.$Proxy22的主要内容,如果未能解决你的问题,请参考以下文章
无法自动装配字段:私有 org.springframework.security.crypto.password.PasswordEncoder;
创建 bean 时出错。注入自动装配的依赖项失败。无法自动装配字段
无法自动装配字段:私有 org.springframework.security.authentication.AuthenticationManager
单元测试 Spring MVC web-app:无法自动装配字段:私有 javax.servlet.ServletContext