2011-05-18 10 views
10

DispatcherServletを使用してブートストラップされたSpring MVC Webアプリケーションを処理しています。これは、アプリケーション全体を管理XmlWebApplicationContextを作成します。Webアプリケーションコンテキストを使用したSpringコンテキスト階層

<servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:springmvc-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

は今ContextSingletonBeanFactoryLocatorを使用して実行時にロードされなければならないいくつかのモジュールがあります。したがって、すべてのモジュールは独自のClasspathXmlApplicationContextを持っています。モジュールがXmlWebApplicationContextからのBeanを参照できるように、XmlWebApplicationContextに接続して、XmlWebApplicationContextが親の役割を果たし、モジュールのClasspathXmlApplicationContextが子コンテキストの役割を果たすコンテキスト階層を形成する必要があります。残念ながら、私は私がこれまでWebApplicationContextに名前parentContextを与えるする方法を発見したので

<beans> 
    <bean id="moduleContext" 
     class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
     <constructor-arg> 
      ... 
     </constructor-arg> 
     <constructor-arg ref="parentContext" /> 
    </bean> 
</beans> 

を使用してそれらを接続することができませんよ。私は何かを見落としてしまったのですか、それとも違う方法で同じことを達成するためのより良い/簡単な方法がありますか?

答えて

2

アノテーションを使用している場合は、あなたがこれを行うことができます:

@Inject 
private XmlWebApplicationContext context; 

@Inject 
private List<ClassPathXmlApplicationContext> childs; 

@PostConstruct 
public void refreshContext() { 
    for(ClassPathXmlApplicationContext appContext : childs) { 
     appContext.setParent(context); 
    } 
    context.refresh(); 
} 

あなたはインターフェースInitializingBeanとApplicationContextAwareを使用することによって、あまりにも注釈なしでそれを行うことができます。

編集:春はClassPathXmlApplicationContextのインスタンスされているすべてのBeanを注入するようchildsは、種類によってautowiredれます。

+0

私はそれらを事前に知らないと、どこから '子ども 'を得るのですか? – aha

+0

あなたが提案したコードを試しました。それは動作しますが、 'ContextSingletonBeanFactoryLocator'に伝播しません。しかし、それは正しい方向に導きます:「ContextSingletonBeanFactoryLocator」を使うのではなく、(GenericApplicationContextを使って)子コンテキストを手動でロードし、それらを 'InitializingBean'の親コンテキストに添付することです。 – aha

関連する問題