当bean实现与Spring的某些接口时,无法自动装配字段

我在我的Java应用程序中使用Spring,所有@Autowired注释一直工作到现在.

简化的例子是:

  @Component
  public class MyBean implements MyInterface {
      ...
  }

  @Component
  public class MyOtherBean {
      @Autowired
      private MyBean myBean;
      ...
  }

一旦我尝试启动应用程序,我得到:

java.lang.IllegalArgumentException:无法将MyBean字段MyOtherBean.myBean设置为$ProxyXX

>接口只包含两个公共简单方法,类实现它们.
>这两个类都是公共的,并且具有公共默认构造函数. (我甚至试图在测试中实例化它们.
>一旦我删除了implements部分,一切正常.

接口的实现有什么问题?什么是$ProxyXX?

最佳答案
我怀疑问题是Spring注入了一个实现MyInterface的AOP代理 – 可能是为了事务管理或缓存.是否有任何MyBean方法注释@Transactional或使用任何其他注释注释?

理想情况下,您可能希望通过它的接口类型引用MyBean – 这应该可以解决问题.

@Component
public class MyOtherBean {
    @Autowired
    private MyInterface myBean;
    ...
}

如果你有多个bean实现MyInterface,那么你总是按名称限定你的bean.

@Component
public class MyOtherBean {
    @Autowired
    @Qualifier("myBean")
    private MyInterface myBean;
    ...
}

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...