Spring共有コンテキスト機構


Springアプリケーションの文脈の引用は基本的に二つの形があります.一つはSpringが提供するAwareインターフェースを実現することによってSpring容器のアプリケーションコンテキストを得ることです.
ContectSingleton BenFactory LocatorはSpringアプリケーションのコンテキストを獲得します.
      第一の場合は言うまでもなく、ここでは主に第二のSpringアプリケーションのコンテキストを得る方法を紹介します.
      いくつかのアプリケーションシーンでは、SpringのAwareインターフェースを使用して、Springコンテキストを使用する必要があるクラスにそのコンテキストを注入することはできません.このような場合は、WebコンテナやEJB容器など、あるアプリケーションが特定の容器内で動作する必要がある場合が一般的である.WebコンテナにとってSpringは既存の大部分の人気MVC容器と統合されているが、EJB容器についてはSpringアプリケーションの文脈の引用を新たに作成されたEJBに伝えることができない.つまりSpringと既存のEJB容器の統合はあまり良くないです.
      もちろん、新しく作成されたEJBごとにSpringアプリケーションの文脈のコピーを持たせてもいいですが、このような方法は時々性能的に大きな消耗を引き起こすことがあります.例えば、Springアプリケーションのコンテキストは、かなり多くのBean定義を含むか、または初期化価格の高いBeanを含む.だからSpringはもう一つの機構、つまりコンテキストを共有する機構を提供しています.
      Springで提供された
ContectSingleton BenFactory Locatorまたは
Singleton BenFactory LocatorはSpringアプリケーションのコンテキストを獲得します.このように、Springは、アプリケーションコンテキストの一例をキャッシュして、さまざまなディストリビュータに提供する.
      このようにSpringのプロファイルを追加する必要があります.このファイルのデフォルトの名前はbeanRefContect.xmlで、内容は大体以下の通りです.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
   <bean id="servicelayer-context" 
         class="org.springframework.context.support.
                ClassPathXmlApplicationContext">
       <constructor-arg>
            <list>
                <value>/servicelayer-applicationContext.xml</value>
            </list>
       </constructor-arg>
   </bean>
</beans>
       このファイルがあれば次のコードを使ってSpringアプリケーションの文脈の引用を得ることができます.

BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance();
BeanFactoryReference bfr = locator.useBeanFactory("serviceLayer-context");
//  factory getBean       bean....
BeanFactory factory = bfr.getFactory();
bfr.release();
      上のコードの1行目のコードは、デフォルトのbeanRefContactxt.xmlプロファイル(Class pathのルートディレクトリの下にある)を読み、2行目のコードは、このプロファイルのBeanをBenFacotryとして指定し、3行目のコードは本当のBenFactoryを取得するために使用されます.
      もちろん、ユーザーはbeanRefContactext.xmlを別の位置の別のファイルに指定することもできます.Contect Singleton BeanFactoryLocator.get Instance(String)を通じて実現できます.具体的にはSpringのJava Docを参照してください.また、beanRefContect.xmlでは、複数の異なるApple Controt実装クラスを定義することができ、Appplication Contectでクラスローディングを実現するためのプロファイルの数とパスを指定することができます.
      他のコンテナでSpringのアプリケーションコンテキストを使用する必要がありますが、他の方法でコンテキストを取得することができない場合はこのような方法があります.もう一つの用途は、このように共有するSpringアプリケーションのコンテキストを定義することができるということです.例えば、J 2 EE EARにはいくつかのWARがあるかもしれません.各WARにおいて使用されている下のServiceは同じです.SpringでService間の依存性と初期化動作を管理し、Springアプリケーションのコンテキストを上記のように共有します.
      このような方法は、Springで1つまたは複数の異なるBeanからなるコンポーネントを維持し、上記のようにその中のコンポーネントを使用することも可能である.