java - Spring 可以有多个 bean 互连版本吗?

标签 java spring javabeans

Spring 配置文件创建 bean 并将它们互连。它是否正确?我的应用程序中有一个 bean 链,但想用较小的链来测试它。我可以使用 Spring 定义多个链吗?或者只允许一种 bean 结构?

示例

假设这是生产配置:

<bean id="provider"
    class="tests.Provider">
</bean>

<bean id="processor1" class="tests.Processor1">
    <property name="input" ref="provider"/>
</bean>

<bean id="processor2" class="tests.Processor2">
    <property name="input" ref="processor1"/>
</bean>

<bean id="consumer" class="tests.Consumer">
    <property name="input" ref="processor2"/>
</bean>

我想在以下配置中进行测试:

<bean id="provider"
    class="tests.Provider">
</bean>

<bean id="analyzer" class="tests.Analyzer">
    <property name="input" ref="provider"/>
</bean>

还有:

<bean id="provider"
    class="tests.Provider">
</bean>

<bean id="processor1" class="tests.Processor1">
    <property name="input" ref="provider"/>
</bean>

<bean id="analyzer" class="tests.Analyzer">
    <property name="input" ref="processor1"/>
</bean>

依此类推,一一附加bean。

最佳答案

是的,可以。

您可以将应用程序的 Spring 应用程序上下文的整体配置分解为多个部分(如果使用 XML 配置,则为 XML 文件;如果使用类路径扫描,则使用 @Components 包;如果使用类路径扫描,则使用 @Configuration code>s(如果您使用基于 Java 的配置)并使用这些部分的子集构建应用程序上下文。

因此,如果您的应用程序有两个功能 foobar,您可以在 foo.xmlbar.xml 分别(如果您使用 XML 配置),并从应用程序的主配置(例如 applicationContext.xml)导入它们。

现在,如果您想为 bar 编写集成测试,您可以仅从 bar.xml 创建应用程序上下文 (@ContextConfiguration("bar.xml"))。显然,您应该注意配置的不同部分之间的相互依赖性。例如,如果 foo.xmlbar.xml 都依赖于 db.xml 中声明的 beans,您可能需要创建类似 test-db.xml 并将 bar 的集成测试配置为 @ContextConfiguration({"bar.xml", "test-db.xml"}).

请注意,这种方法需要一些纪律,特别是如果您使用类路径扫描 - 在这种情况下,部分配置是由包定义的,因此您需要遵循“按功能包,而不是按层包”规则。

另请参阅:

关于java - Spring 可以有多个 bean 互连版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408553/

相关文章:

java - 无法将 int 字段 com.java.hibernate.practise.User.id 设置为 java.util.HashSet

java - Spring @ComponentScan 注释不起作用

java - Spring 内置的调度器是持久的吗?

JavaScript/Javabean : co-operation not working for counter

java - 在 Java 中计算 alpha 形状(凹包)

java - GlassFish Server 更新中心安装超时

java - 解析一个文件中的多个 JSON 对象

java - Spring Bean Life Cycle中init和destroy bean方法的疑惑

java - 为什么我不能注入(inject)一个 bean 的多个实例?

java - 从无状态 Bean 返回有状态 Java Bean?