我有一个要从Spring 3.1.2迁移到4.1.6的应用程序。交换版本后,由于错误的自动装配bean,导致多个测试用例失败。

我想自动连接我自己的BeanFactory实现。

public class DataModel extends AbstractDataModel
{
    @Autowired
    private BeanFactory beanFactory;

    ...
}


我的BeanFactory实现是从ApplicationContext(它实现BeanFactory)派生而来的:

public class MyApplicationContext implements ApplicationContext
{
    ...
}


我在application.xml中定义了bean:



<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <context:annotation-config />

    <bean id="beanFactory" class="com.inxmail.xpro.server.MyApplicationContext">
    </bean>

</beans>


但是现在在运行时,beanFactory的实例类型为DefaultListableBeanFactory而不是MyApplicationContext。在更改版本之前,实例的类型为MyApplicationContext。

请注意,这种初始化仅用于我们框架的单元测试目的。
还要注意,我试图缩短所有内容,只发布相关的代码片段。希望我没有忘记代码的重要部分。在这种情况下,请发布可能也相关的内容。

我已经在Spring文档,迁移指南和论坛中为我们进行了研究,但无法弄清楚可能是什么问题。
我假设在Spring的初始化过程中发生了一些更改,这会导致此错误。

如果有人可以给我一个提示,那将是一件很好的事。

问候
一月

最佳答案

感谢M. Deinum,我找到了解决方案。我把该豆标记为主要豆。因此正确的bean将被自动装配,并且我的测试类现在通过。

这是代码:

<beans xmlns="http://www.springframework.org/schema/beans" ...>

    <context:annotation-config />

    <bean id="beanFactory" class="com.inxmail.xpro.server.MyApplicationContext" primary="true">
    </bean>

</beans>


不幸的是,我偶然发现了解决方案,并没有发现spring行为的变化。

08-04 06:08