0

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>

依此类推,一颗一颗地贴上豆子。

4

3 回答 3

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。

于 2012-09-13T14:51:31.847 回答
1

是的你可以。

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

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

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

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

也可以看看:

于 2012-09-13T14:52:57.450 回答
0

简单来说,spring 框架负责对象创建。您希望 Spring 管理这些对象,您将它们定义为 bean。所以当spring创建一个bean1时,如果bean1引用了bean2,bean2被实例化并注入bean1,最后bean1被创建。将其视为链条将过于复杂。

spring 文档的第 3.2 节

于 2012-09-13T14:34:33.483 回答