我有一个应用程序,正在从 Spring 3.1.2 迁移到 4.1.6。交换版本后,由于 Autowiring 的 bean 错误,多个测试用例失败。
我想 Autowiring 我自己的 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 标记为主要 bean。因此,正确的 bean 将被 Autowiring ,并且我的测试类现在通过了。
这是代码:
<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 行为变化的文档。
关于java - 从 Spring 3.1.2 迁移到 4.1.6 后,DefaultListableBeanFactory Autowiring ,而不是自己实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867007/