我在我的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;
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。