繁体   English   中英

Spring Autowire表现异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM