3

Spring ベースのバックエンドを備えた Spring ベースの Web アプリがあります。現在、統合は、バックエンドの .xml を Web アプリのリソースに手動でコピーしてマージするというばかげた方法で行われています。

Spring が別の Bean を持つ準備ができているかApplicationContextどうか、そしてそれから Bean を取得できるかどうか疑問に思っていました。また、Bean 名の衝突を処理する場合 (たとえば、「インポートされた」Bean に名前空間を割り当てることができる場合)。

または - この場合のベストプラクティスは何ですか?

ありがとう、オンドラ。

4

3 に答える 3

2

私は常にSpringXMLをレイヤーごとに分割しています:Web、サービス、永続性。1つのファイルに収まるわけではありません。それは大丈夫ではないと思います。これがベストプラクティスです。

于 2010-06-21T01:20:14.800 に答える
2

デフォルトでは、すでに2つのコンテキストが必要です。サーブレットにちなんで名付けられたコンテキスト([servlet-name] -context.xml)はWebApplicationContextであり、contextConfigLocationにリストされたファイルから作成され、ContextLoaderListenerによってロードされるメインのApplicationContextの子コンテキストです。子は親で定義された任意のBeanにアクセスできますが、親は子で定義されたBeanにアクセスできないため、Beanの移動を開始する前に、このことに注意してください。

WebApplicationContextには、Web固有の構成(コントローラーやビューなど)のみを保持します。Webに固有でないものはすべて、メインのApplicationContextに入ります。これ自体は常に単一のファイルであり、他の人が提案しているように、レイヤーごとに分類された他のアプリケーションコンテキストxmlファイルをインポートするだけです。

<import resource="classpath:dao-context.xml" />
<import resource="classpath:service-context.xml" />
<import resource="security-context.xml" />

Springは各アプリケーションコンテキストで1つのproperty-placeholder要素のみを許可しますが、各子アプリコンテキストでも1つ持つことができるため、[servlet-name]-context.xmlファイルには常にweb-を含むproperty-placeholderがあります。特定の構成プロパティとメインアプリケーションコンテキストには異なるものがあります。これは通常、すべてのインポートの前に、最上位のファイルで定義します。

于 2010-06-21T11:38:27.997 に答える
1

私があなたのことを正しく理解していれば、これで間違いありません。データベース コンテキストを Web コンテキストと分割する人もいます。以下の web.xml の例:

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

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

Bean の衝突については、Bean に一意の ID を与える必要があります。

于 2010-06-21T01:01:04.500 に答える