XmlファイルでSpring Beanを定義しています。別のxmlファイルから参照したい。どうすればいいですか?
いくつかのオプションがあります:
<import resource="classpath:config/spring/that-other-xml-conf.xml"/>
<bean id="yourCoolBean" class="org.jdong.MyCoolBean">
<property name="anotherBean" ref="thatOtherBean"/>
</bean>
ApplicationContext
構造に含める両方のファイルを作成するときにApplicationContext
の一部にします=>その後、インポートは不要です。
たとえば、テスト中に必要な場合:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:META-INF/conf/spring/this-xml-conf.xml",
"classpath:META-INF/conf/spring/that-other-xml-conf.xml" })
public class CleverMoneyMakingBusinessServiceIntegrationTest {...}
Webアプリの場合は、web.xml
:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/conf/spring/this-xml-conf.xml</param-value>
<param-value>WEB-INF/conf/spring/that-other-xml-conf.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
スタンドアロンのアプリ、ライブラリなどの場合、ApplicationContext
を次のようにロードします。
new ClassPathXmlApplicationContext(
new String[] { "classpath:META-INF/conf/spring/this-xml-conf.xml",
"classpath:META-INF/conf/spring/that-other-xml-conf.xml" } );
<import resource="otherXml.xml">
でBeanを定義するxmlをインポートするだけで、Bean定義を使用できます。
resource
属性でclasspath:
を使用できます。
<import resource="classpath:anotherXXML.xml" />
Springリファレンスの この章 の「3.18。1つのファイルから別のファイルへのBean定義のインポート」を参照してください。
同じXMLファイルでBeanを参照するのとまったく同じように参照します。 Springコンテキストが複数のXMLファイルで構成されている場合、すべてのBeanは同じコンテキストの一部であるため、一意の名前空間を共有します。
または、単一のxmlファイルが大きくなりすぎないようにBeanを複数のファイルにリファクタリングする場合は、現在のフォルダーから参照するだけです。
<import resource="processors/processor-beans.xml"/>
また、コードに複数のSpring Bean構成ファイルをロードすることで、これを実行できます。
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"Spring-Common.xml", "Spring-Connection.xml","Spring-ModuleA.xml"});
すべてのspring xmlファイルをプロジェクトクラスパスの下に配置します。
project-classpath/Spring-Common.xml
project-classpath/Spring-Connection.xml
project-classpath/Spring-ModuleA.xml
ただし、上記の実装では整理やエラーが発生しにくいため、Spring Beanのすべての構成ファイルを単一のXMLファイルに整理する方が適切です。たとえば、Spring-All-Module.xml
ファイル、および次のようにSpring Beanファイル全体をインポートします。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<import resource="common/Spring-Common.xml"/>
<import resource="connection/Spring-Connection.xml"/>
<import resource="moduleA/Spring-ModuleA.xml"/>
</beans>
これで、次のような単一のxmlファイルをロードできます。
ApplicationContext context =
new ClassPathXmlApplicationContext(Spring-All-Module.xml);
注Spring3では、代替ソリューションは JavaConfig @Import を使用しています。