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>
依此类推,逐个附上豆子。
答案 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-基于配置)并使用这些部分的子集构建应用程序上下文。
因此,如果您的应用程序有两个功能foo
和bar
,则可以分别在foo.xml
和bar.xml
中声明这些功能使用的bean(如果使用XML配置) ),并从您的应用程序的主要配置(例如applicationContext.xml
)导入它们。
现在,如果您要为bar
编写集成测试,则只能从bar.xml
创建应用程序上下文(@ContextConfiguration("bar.xml")
)。显然,您应该注意配置的不同部分之间的相互依赖性。例如,如果foo.xml
和bar.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。将其视为连锁将会过于复杂化。