`
ynztpwl
  • 浏览: 55933 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过ApplicationContextAware获取bean .

阅读更多

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,获得ApplicationContext对象。

前提必须在Spring配置文件中指定该类

public class ApplicationContextRegister implements ApplicationContextAware {

private Log log = LogFactory.getLog(getClass());

public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
ContextUtils.setApplicationContext(applicationContext);
log.debug("ApplicationContext registed");
}

}

public class ContextUtils {

private static ApplicationContext applicationContext;

private static Log log = LogFactory.getLog(ContextUtils.class);

public static void setApplicationContext(ApplicationContext applicationContext) {
synchronized (ContextUtils.class) {
log.debug("setApplicationContext, notifyAll");
ContextUtils.applicationContext = applicationContext;
ContextUtils.class.notifyAll();
}
}

public static ApplicationContext getApplicationContext() {
synchronized (ContextUtils.class) {
while (applicationContext == null) {
try {
log.debug("getApplicationContext, wait...");
ContextUtils.class.wait(60000);
if (applicationContext == null) {
log.warn("Have been waiting for ApplicationContext to be set for 1 minute", new Exception());
}
} catch (InterruptedException ex) {
log.debug("getApplicationContext, wait interrupted");
}
}
return applicationContext;
}
}

public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}

}

配置文件:<bean class="com.sinotrans.framework.core.support.ApplicationContextRegister" />

正常情况:

  1. publicclassAppManagerextendsContextLoaderListenerimplementsServletContextListener{
  2. privateServletContextcontext;
  3. privateWebApplicationContextwebApplicationContext;
  4. publicvoidcontextInitialized(ServletContextEventsce){
  5. this.context=sce.getServletContext();
  6. this.webApplicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(context);
  7. this.context.setAttribute("WEBAPPLICATIONCONTEXT",webApplicationContext);
  1. HttpSessionsession=request.getSession();
  2. WebApplicationContextwebApplicationContext=(WebApplicationContext)session.getServletContext().getAttribute("WEBAPPLICATIONCONTEXT");
  3. UnsubscribeEmailFacadeunsubscribeEmailFacade=(UnsubscribeEmailFacade)webApplicationContext.getBean("unsubscribeEmailFacade");
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics