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

通过ApplicationContextAware获取bean

2017-04-13 10:09 369 查看
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,获得ApplicationContext 对象。

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

 

public class SpringContextHolder implements ApplicationContextAware {

/**
* 以静态变量保存ApplicationContext,可在任意代码中取出ApplicaitonContext.
*/
private static ApplicationContext context;

/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
public void setApplicationContext(ApplicationContext context) {
SpringContextHolder.context =context;
}
public static ApplicationContext getApplicationContext() {
return context;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
public static <T> T getBean(String name) {
return (T) context.getBean(name);
}
}

 bean中:

<bean id="springContextHolder" class="com.enation.framework.context.spring.SpringContextHolder" />

 

调用:

ICartManager cartManager = SpringContextHolder.getBean("cartManager");

 

正常情况:

 

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");

 法2:

 

org.springframework.web.context.ContextLoader
// 获取spring bean容器
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
ISysConfigDao sysconfigdao = (ISysConfigDao) wac.getBean("iSysConfigDao");

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: