java - Spring Autowiring 未按预期运行

标签 java spring dependency-injection autowired

我尝试使用@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/

相关文章:

Java Swing布局问题

OOP - 嵌套对象依赖关系的长链是反模式吗?

c# - 使用 NInject 在 WPF 中注入(inject)没有无参数构造函数的 View 模型类

c# - 具有多个存储库和服务的 .NET MVC Controller ?

java - 将 Ctrl+C 发送到在 java 中启动的进程

java - 关于java父类(super class)和子类的初学者问题

java - JSON 嵌套对象

java - Spring @Autowire 注解

java - Spring 休息模板。如何解析服务器对 POJO 的 XML 响应

java - 第二个自动连接的 REST 存储库不工作