質問

Springの構成を複数のxmlファイルに分割する正しい方法は何ですか?

現時点で私は

  • /WEB-INF/foo-servlet.xml
  • /WEB-INF/foo-service.xml
  • /WEB-INF/foo-persistence.xml

私のweb.xmlには次のものがあります:

<servlet>
    <description>Spring MVC Dispatcher Servlet</description>
    <servlet-name>intrafest</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/foo-*.xml
        </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            /WEB-INF/foo-*.xml
    </param-value>
</context-param>


<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

実際の質問:

  • このアプローチは正しい/ベストですか?
  • 本当にDispatcherServletセクションとcontext-paramセクションの両方で構成場所を指定する必要がありますか?

foo-servlet.xmlで定義されたBeanをfoo-service.xmlから参照できるようにするには、何を覚えておく必要がありますか?これは、contextConfigLocationで<=>を指定することに関係していますか?

更新1:

Spring フレームワーク3.0を使用しています。次のようにリソースのインポートを行う必要がないことは私の理解です:

 <import resource="foo-services.xml"/> 

これは正しい仮定ですか?

役に立ちましたか?

解決

次のセットアップが最も簡単だと思います。

のデフォルトの設定ファイル読み込みメカニズムを使用します。 DispatcherServlet

  

フレームワークは、初期化時に   DispatcherServletの場合、   [servlet-name] -servlet.xmlという名前のファイル   WebのWEB-INFディレクトリ   アプリケーションとBeanの作成   そこに定義されている(   で定義されたBeanの定義   グローバルスコープの同じ名前)。

あなたの場合、単にintrafest-servlet.xmlディレクトリーにファイルWEB-INFを作成し、web.xmlに特定の情報を指定する必要はありません。

context-paramファイルでは、インポートしてXML構成を作成します。

<beans>
  <bean id="bean1" class="..."/>
  <bean id="bean2" class="..."/>

  <import resource="foo-services.xml"/>
  <import resource="foo-persistence.xml"/>
</beans>

実際には、Springチームは(Web)ApplicationContextを作成するときに複数の構成ファイルをロードすることを好みます。それでもこの方法でやりたい場合は、コンテキストパラメータ(init-param)と サーブレット初期化パラメータ(<=>)の両方を指定する必要はないと思います。 2つのうちの1つで十分です。コンマを使用して、複数の構成場所を指定することもできます。

他のヒント

Mike Neresonのブログには次のように書かれています:

http://blog.codehangover.com/load-multiple-contexts-into-spring/

  

これを行うにはいくつかの方法があります。

     

1。 web.xml contextConfigLocation

     

最初のオプションは、それらすべてをWebアプリケーションにロードすることです   ContextConfigLocation要素を介したコンテキスト。あなた<!>#8217;すでに行っています   <!>#8217;書いていると仮定して、ここにプライマリapplicationContextを持つ   Webアプリケーション。あなたがする必要があるのは、間に空白を入れることです   次のコンテキストの宣言。

  <context-param>
      <param-name> contextConfigLocation </param-name>
      <param-value>
          applicationContext1.xml
          applicationContext2.xml
      </param-value>
  </context-param>

  <listener>
      <listener-class>
          org.springframework.web.context.ContextLoaderListener
      </listener-class>
  </listener>
     

上記ではキャリッジリターンを使用しています。あるいは、ヨーヨーは   スペース。

  <context-param>
      <param-name> contextConfigLocation </param-name>
      <param-value> applicationContext1.xml applicationContext2.xml </param-value>
  </context-param>

  <listener>
      <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
  </listener>
     

2。 applicationContext.xmlインポートリソース

     

他のオプションは、プライマリapplicationContext.xmlを追加することです   web.xmlに追加し、そのプライマリコンテキストでimportステートメントを使用します。

     

applicationContext.xmlには<!>#8230;

  <!-- hibernate configuration and mappings -->
  <import resource="applicationContext-hibernate.xml"/>

  <!-- ldap -->
  <import resource="applicationContext-ldap.xml"/>

  <!-- aspects -->
  <import resource="applicationContext-aspects.xml"/>
     

どの戦略を使用する必要がありますか

     

1。常に web.xml を介してロードすることを好みます。

     

なぜなら、これにより、すべてのコンテキストをそれぞれから分離した状態に保つことができます   その他。テストでは、実行する必要があるコンテキストのみをロードできます   それらのテスト。これにより、コンポーネントとしての開発もモジュール化されます   loosely coupledにとどまり、将来パッケージを抽出できるようにします   または垂直レイヤーを独自のモジュールに移動します。

     

2。コンテキストをnon-web applicationにロードする場合、importリソースを使用します。

処理しているコンテキストには2つのタイプがあります:

1 :ルートコンテキスト(親コンテキスト。通常、すべてのjdbc(ORM、Hibernate)初期化およびその他のスプリングセキュリティ関連の構成が含まれます)

2 :個々のサーブレットコンテキスト(子コンテキスト。通常はDispatcherサーブレットコンテキスト。spring-mvcに関連するすべてのBean(コントローラー、URLマッピングなど)。)

複数のアプリケーションコンテキストファイルを含むweb.xmlの例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                            http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name>Spring Web Application example</display-name>

    <!-- Configurations for the root application context (parent context) -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/jdbc/spring-jdbc.xml <!-- JDBC related context -->
            /WEB-INF/spring/security/spring-security-context.xml <!-- Spring Security related context -->
        </param-value>
    </context-param>

    <!-- Configurations for the DispatcherServlet application context (child context) -->
    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/mvc/spring-mvc-servlet.xml
            </param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>/admin/*</url-pattern>
    </servlet-mapping>

</web-app>

@eljenso:アプリケーションがSPRING WEB MVCを使用する場合、intrafest-servlet.xml webapplication context xmlが使用されます。

それ以外の場合、@ kosoantの設定は問題ありません。

SPRING WEB MVCを使用せず、SPRING IOCを使用する場合の簡単な例:

web.xml内:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application-context.xml</param-value>
</context-param>

その後、application-context.xmlには次のものが含まれます。<import resource="foo-services.xml"/> さまざまなアプリケーションコンテキストファイルをロードしてメインのapplication-context.xmlに入れるこれらのインポートステートメント。

これが役立つことを感謝します。

私は modular-spring-contexts の著者です。

これは、 XMLベースの構成メタデータの作成modular-spring-contextsは基本的にスタンドアロンのアプリケーションコンテキストであるモジュールを定義し、モジュールが他のモジュールからBeanをインポートできるようにすることで機能します。他のモジュールは<!>#237; n元のモジュールです。

キーポイントは次のとおりです

  • モジュール間の依存関係の制御
  • どのBeanがエクスポートされ、どこで使用されるかを制御
  • Beanの名前の衝突の可能性を低減

簡単な例は次のようになります。

ファイルmoduleDefinitions.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />

    <module:module id="serverModule">
        <module:config location="/serverModule.xml" />
    </module:module>

    <module:module id="clientModule">
        <module:config location="/clientModule.xml" />
        <module:requires module="serverModule" />
    </module:module>

</beans>

ファイルserverModule.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />

    <bean id="serverSingleton" class="java.math.BigDecimal" scope="singleton">
        <constructor-arg index="0" value="123.45" />
        <meta key="exported" value="true"/>
    </bean>

</beans>

ファイルclientModule.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />

    <module:import id="importedSingleton" sourceModule="serverModule" sourceBean="serverSingleton" />

</beans>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top