Java 从Spring 3.1.2迁移到4.1.6后,DefaultListableBeanFactory自动连接而不是自己的实现

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

我有一个应用程序,我正在从Spring3.1.2迁移到4.1.6。交换版本后,由于错误的自动连线bean,几个测试用例失败

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

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。谢谢您的评论。根据你的信息做了更多的研究并找到了解决方案。我将发布它是如何为我工作的。