2012-09-13 49 views
0

Spring配置文件创建bean并将它们互连。它是否正确?我的应用程序中有一串豆子,但想用较小的链子测试它。我可以使用Spring定义多个链吗?或者只允许一个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> 

而且我要在以下CONFIGS测试:

<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

你可以给你谈话的结构如约 –

+1

你能提供一个例子吗?什么是“豆链”?你可以定义任何你想要的,只要给他们不同的ID /名称。或者使用不同的配置文件进行测试。 –

回答

1

是的,你可以。

(如果你,如果你使用基于Java的配置中使用XML配置,封装,@Components如果你使用的类路径扫描,@Configuration小号XML文件),你可以打破Spring应用程序上下文的整体配置为您的应用程序分为部分和构建应用程序上下文使用这些部分的一个子集。

所以,如果你的应用有两个特点foobar,您可以分别和bar.xml(如果您使用XML配置)宣布这些功能所使用豆类,以及从应用程序的主要配置导入(如applicationContext.xml)。

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

请注意,此方法需要遵守一些规则,尤其是在使用类路径扫描的情况下(在这种情况下,部分配置由程序包定义),因此您需要遵循“按功能而不是按层”规则。

参见:

0

简而言之,Spring框架负责对象创建。您希望Spring管理的这些对象将它们定义为bean。所以当spring创建一个bean1(如果该bean1引用了bean2)时,bean2被实例化并注入到bean1中,最后创建bean1。将其视为连锁将变得复杂化。

Section 3.2 of spring docs

+0

OP知道Spring *做了什么*。 –

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> 

然后,如果我需要测试DAO的,我只导入testContextDao内dataContext.xml。

相关问题