Java 从Spring 3.1.2迁移到4.1.6后,DefaultListableBeanFactory自动连接而不是自己的实现
我有一个应用程序,我正在从Spring3.1.2迁移到4.1.6。交换版本后,由于错误的自动连线bean,几个测试用例失败 我想自动连接我自己的BeanFactory实现Java 从Spring 3.1.2迁移到4.1.6后,DefaultListableBeanFactory自动连接而不是自己的实现,java,spring,autowired,Java,Spring,Autowired,我有一个应用程序,我正在从Spring3.1.2迁移到4.1.6。交换版本后,由于错误的自动连线bean,几个测试用例失败 我想自动连接我自己的BeanFactory实现 public class DataModel extends AbstractDataModel { @Autowired private BeanFactory beanFactory; ... } 我的BeanFactory实现源于ApplicationContext(它实现BeanFactor
public class DataModel extends AbstractDataModel
{
@Autowired
private BeanFactory beanFactory;
...
}
我的BeanFactory实现源于ApplicationContext(它实现BeanFactory):
我在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的初始化过程发生了一些变化,这导致了该故障
如果有人能告诉我那里发生了什么,那就太好了
问候
一月多亏了戴纳姆先生,我找到了解决办法。我将该bean标记为主bean。所以正确的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>
不幸的是,我偶然发现了这个解决方案,并没有发现弹簧行为变化的证据。多亏了M.Deinum,我找到了一个解决方案。我将该bean标记为主bean。所以正确的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行为的任何变化。在早期版本中,
@Autowire
将连接一个普通的bean,它现在模仿的是较新版本,在这种情况下,BeanFactoryAware
的行为将注入它运行的上下文,不是上下文中的某个bean。谢谢您的评论。根据你的信息做了更多的研究并找到了解决方案。我将发布它是如何为我工作的。在早期版本中,@Autowire
将连接一个普通bean,而现在它模仿的是较新版本,在这种情况下,BeanFactoryAware
的行为将注入它运行的上下文,而不是上下文中的某个bean。谢谢您的评论。根据你的信息做了更多的研究并找到了解决方案。我将发布它是如何为我工作的。在早期版本中,@Autowire
将连接一个普通bean,而现在它模仿的是较新版本,在这种情况下,BeanFactoryAware
的行为将注入它运行的上下文,而不是上下文中的某个bean。谢谢您的评论。根据你的信息做了更多的研究并找到了解决方案。我将发布它是如何为我工作的。