我尝试使用@Autowire
为测试类 Autowiring bean,但是bean没有装配,我得到了这个异常:
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 suggests ,spring是一个非常倾向于使用接口(interface)的框架。 spring 的最佳实践是定义对接口(interface)的依赖并让 spring 注入(inject)实现。这就是依赖注入(inject)的全部要点:您指定所需的接口(interface),但容器将注入(inject)它选择的实现类,该实现类可以是您创建的类,也可以是基于此类的动态代理。但类不应该知道其依赖项的实现细节。
这是 Spring Proxying Mechanism 的引用.
关于使用接口(interface)的一般概念,你应该阅读Effective Java by Joshua Bloch ,第 8 章,第 52 条:通过接口(interface)引用对象。另外,您应该阅读Interfaces and Inheritance来自 Sun Java 教程。
关于java - Spring Autowiring 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754296/