3

別のコンテキストで自動配線された Spring Bean にアクセスしたい。

これは可能ですか?

ApplicationContext を使用して、次のようなものを使用して配線できると思います:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class ApplicationContextProvider implements ApplicationContextAware {
    private static ApplicationContext ctx = null;
    public static ApplicationContext getApplicationContext() {
        return ctx;
    }
    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        this.ctx = ctx;
    }
}


<bean id="applicationContextProvider" class="ApplicationContextProvider"></bean>

これは正しいです ?

4

1 に答える 1

1

いいえ、あなたがしているのは、Bean を宣言する現在のコンテキストのリスナーを作成することです。

別のコンテキストで自動配線された Spring Bean にアクセスしたい。

自動配線が必要な場合は、構成タイプ (java と xml) を使用して、<import>または構成タイプに応じて、他のコンテキストをインポートする必要があります。@Import例えば

<import resource="classpath:/path/to/otherAppContext.xml" />

Bean を取得したいだけの場合は、いつでも他のApplicationContextandを作成できますgetBean()

ApplicationContext otherContext = ...// get other context  
BeanClass otherBean = otherContext.getBean(BeanClass.class);

ContextLoaderListenerが で行うのと同じ方法で、アプリケーション コンテキストをマージすることもできますDispatcherServlet。詳細については、ソース コードを参照してください。

于 2013-10-03T15:16:45.673 に答える