我可以与Spring有多个bean互连版本吗?

时间:2012-09-13 14:26:19

标签: 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>

依此类推,逐个附上豆子。

3 个答案:

答案 0 :(得分:1)

我相信你想测试集成,我通常做的是在层中分离我的bean配置文件,然后根据需要导入它们进行测试。像这样:

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    <context:property-placeholder
        location="classpath:mx/gob/jgtjo/apps/schedule/web/schedule-web.properties"
        file-encoding="UTF-8" system-properties-mode="NEVER" />

    <!-- Context files -->
    <import resource="spring/dataContext.xml" />
    <import resource="spring/serviceContext.xml" />
    <import resource="spring/securityContext.xml" />
    <import resource="spring/components.xml" />

</beans>

然后,如果我需要测试Daos,我只在testContextDao中导入dataContext.xml。

答案 1 :(得分:1)

是的,你可以。

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

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

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

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

另见:

答案 2 :(得分:0)

简单来说,spring框架负责对象创建。您希望Spring管理的这些对象将它们定义为bean。因此,当spring1创建bean1时,如果bean1引用了bean2,则实例化bean2并将其注入bean1,最后创建bean1。将其视为连锁将会过于复杂化。

Section 3.2 of spring docs

相关问题