您的位置:首页 > 移动开发

通过ApplicationContextAware获取bean .

2012-12-20 11:38 561 查看
加载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" />

 

正常情况:

public class AppManager extends ContextLoaderListener implements  ServletContextListener {
  
  
    private ServletContext context;   
    private WebApplicationContext webApplicationContext;   
  
    public void contextInitialized(ServletContextEvent sce) {   
        this.context = sce.getServletContext();   
        this.webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);   
        this.context.setAttribute("WEBAPPLICATIONCONTEXT", webApplicationContext);       }  
HttpSession session = request.getSession();   
WebApplicationContext webApplicationContext = (WebApplicationContext)session.getServletContext().getAttribute("WEBAPPLICATIONCONTEXT");   
UnsubscribeEmailFacade unsubscribeEmailFacade = (UnsubscribeEmailFacade)webApplicationContext.getBean("unsubscribeEmailFacade");  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: