通过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");
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");
相关文章推荐
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取spring容器中的bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取spring容器中的bean
- spring不通过注入的方式获取对象(BeanFactoryAware \ApplicationContextAware )
- 通过ApplicationContextAwareSpring实现手工加载配置的javabean
- 通过ApplicationContextAwareSpring实现手工加载配置的javabean
- ApplicationContextAware 接口的作用 获取所有bean
- Spring ApplicationContextAware 获取bean
- ApplicationContextAware快速获取bean
- Spring - 运行时获取bean(ApplicationContextAware接口)
- Spring中ApplicationContextAware实现获取bean的工具类,在servlet中通过servletContext获取application
- ApplicationContextAware获取Spring上下文,通过基类获取properties中的配置属性
- 程序运行过程中获取Spring上下文通过ApplicationContextAware
- @SpringContext通过实现ApplicationContextAware接口动态获取bean