web-dev-qa-db-ja.com

春に別のXMLファイルのBeanを参照する方法

XmlファイルでSpring Beanを定義しています。別のxmlファイルから参照したい。どうすればいいですか?

36
Jeffrey.W.Dong

いくつかのオプションがあります:

インポート

<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" } );
54
tolitius

<import resource="otherXml.xml">でBeanを定義するxmlをインポートするだけで、Bean定義を使用できます。

resource属性でclasspath:を使用できます。

<import resource="classpath:anotherXXML.xml" />

Springリファレンスの この章 の「3.18。1つのファイルから別のファイルへのBean定義のインポート」を参照してください。

6
Xavi López

同じXMLファイルでBeanを参照するのとまったく同じように参照します。 Springコンテキストが複数のXMLファイルで構成されている場合、すべてのBeanは同じコンテキストの一部であるため、一意の名前空間を共有します。

5
JB Nizet

または、単一のxmlファイルが大きくなりすぎないようにBeanを複数のファイルにリファクタリングする場合は、現在のフォルダーから参照するだけです。

<import resource="processors/processor-beans.xml"/>
3
Tom Chamberlain

また、コードに複数の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 を使用しています。

1
Program-Me-Rev