複数のアプリケーション コンテキストを持つ必要はありません。多くの場合、共有アプリケーション コンテキストが必要です。
アプリケーションで複数のアプリケーション コンテキストを作成しないようにするには、次の手順を実行します。
applicationcontextprovider Bean が作成されると、Spring フレームワークは ApplicationContext を setApplicationContext に注入します。
これで、必要に応じてアプリケーション コンテキストを返す静的ユーティリティ メソッド getApplicationContext が 1 つあります。
アプリケーションコンテキストが必要なときはいつでも、次のように言うだけです:ApplicationContextProvider.getApplicationContext(); 、共有アプリケーション コンテキストを返します。
/* アプリケーション コンテキスト プロバイダー クラス */
public class ApplicationContextProvider implements ApplicationContextAware {
private static Logger logger = Logger.getLogger(ApplicationContextProvider.class);
private static ApplicationContext ctx;
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
if (arg0 != null) {
ctx=arg0;
}
}
public synchronized static ApplicationContext getApplicationContext(){
if (ctx==null) {
logger.info("Getting the context again as it is null");
ctx = new ClassPathXmlApplicationContext("Spring-All-Module.xml");
}
return ctx;
}
}
春の XML:
<bean id="applicationContextProvider" class="dell.harmony.service.ApplicationContextProvider"></bean>
メイン プログラム クラスから:
try {
logger.info("Spring Application Context !!");
ApplicationContext context = new ClassPathXmlApplicationContext(
"/Spring-All-Module.xml");
logger.info("Spring Application Context - End !!");
} catch (Exception e) {
logger.error("Exception in getting the Spring Application Context !!");
/* log the exception */
}
コンテキストが必要なときはいつでも、次のように言うだけです: //get application context
ApplicationContext コンテキスト = ApplicationContextProvider.getApplicationContext();
dl = (SingleDataLoader) context.getBean("singledataloaderdao");