java - 从 Spring 3.1.2 迁移到 4.1.6 后,DefaultListableBeanFactory Autowiring ,而不是自己实现

标签 java spring autowired

我有一个应用程序,正在从 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/

相关文章:

java - 数据传输无法使用 ObjectOutputStream.writeObject()

java - SpringBoot : requestParam value validation when required=false

Spring MVC 请求体错误处理

java - 如何在 spring boot 1.4.1 中配置 querydsl?

spring - 如何 Autowiring 此 TokenStore

java - 是否可以在一行代码中执行两个不同的 "+="和 "-="操作?

java - Car 类和 Road 类之间的关系 - UML 和 Java 代码

java - 类似于 Java 的 EnumSet 的结构,可以容纳重复的元素

spring - 如果有多个类实现一个接口(interface),那么@autowired如何工作?

java - Spring - @Autowiring 存储库不起作用。 @Autowiring 其他类有