1.我可以在我的独立程序中创建一个应用程序上下文,如下所示
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/myConfig.xml");
是的,但请确保您只做一次。
2.我们可以在同一个项目中创建多个应用程序上下文
是的,但这不是一个好习惯。因此,只需为您的独立程序创建一次 ApplicationContext(可能是您的 Web 应用程序)并调用 ApplicationContextProvider 以获取现有的 ApplicationContext
下面给出了创建ApplicationContextProvider的示例代码和解释。
弹簧配置
<bean id="applicationContextProvider" class="dell.harmony.service.ApplicationContextProvider"></bean>
这将被spring容器调用,当它第一次创建一个applicationcontext并且applicationContext将被传递给setter方法(setApplicationContext)。我们通过 getApplicationContext() 公开应用程序上下文,以便其他方法可以使用它。
package dell.harmony.service;
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*
*
* Utility Class to return the Spring ApplicationContext
*
*
*/
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("SpringModule.xml");
}
return ctx;
}
}
当您需要应用程序上下文时,请按如下方式使用它
第一次初始化调度器。
logger.info("Spring Application Context !!");
ApplicationContext context = new ClassPathXmlApplicationContext("/SpringModule.xml");
logger.info("Spring Application Context - End !!");
在所有其他地方,使用如下:
ApplicationContext context = ApplicationContextProvider.getApplicationContext();
SingleDataLoader dl = (SingleDataLoader) context.getBean("singledataloaderdao");