[英]Spring autowire not behaving as expected
我试图使用@Autowire
为测试类自动装配一个bean,但是该bean未@Autowire
,并且出现以下异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [com.abc.MyDaoHibernateImpl] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this
dependency.
Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的测试课看起来像这样:
package com.abc;
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@TransactionConfiguration(transactionManager = "hibernateTransactionManager")
public class MyDaoHibernateImplTest
extends AbstractTransactionalJUnit4SpringContextTests
{
@Autowired
private MyDaoHibernateImpl myDao;
....
}
applicationContext.xml文件具有以下bean定义:
<bean id="myDao" class="com.abc.MyDaoHibernateImpl">
<property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>
谁能看到我要去哪里错了?
在此先感谢您的任何建议。
- 詹姆士
正如axtavt所建议的那样 ,spring是一个非常赞成使用接口的框架。 Spring的最佳实践是定义对接口的依赖关系,并让Spring注入实现。 这就是依赖项注入的全部要点:您指定所需的接口,但是容器将注入它选择的实现类,该实现类可以是您创建的类,也可以是基于该类的动态代理。 但是类不应该知道其依赖项的实现细节。
这是Spring Proxying机制的参考。
关于使用接口的一般概念,您应该阅读Joshua Bloch撰写的Effective Java ,第8章,第52项:按对象的接口引用对象。 另外,您还应该阅读《 Sun Java教程》中的“ 接口和继承 ”。
我猜您的bean的实际类型被用于应用方面的动态代理所遮盖。 在这种情况下,您需要对自动连接的字段使用接口而不是类(或使用proxy-target-class="true"
强制目标类代理策略)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.