无法自动装配字段:不能到 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;

其中IFolderServiceFolderService 实现的接口。

【讨论】:

【参考方案4】:

将 @Transaction 从您的 DAO 对象移动到 Service 对象。

【讨论】:

以上是关于无法自动装配字段:不能到 com.sun.proxy.$Proxy22的主要内容,如果未能解决你的问题,请参考以下文章

注入自动装配的依赖项失败,无法自动装配字段

无法自动装配字段:私有 org.springframework.security.crypto.password.PasswordEncoder;

创建 bean 时出错。注入自动装配的依赖项失败。无法自动装配字段

Spring框架的新手收到此错误:无法自动装配字段:

无法自动装配字段:私有 org.springframework.security.authentication.AuthenticationManager

单元测试 Spring MVC web-app:无法自动装配字段:私有 javax.servlet.ServletContext