监听器和普通类获取springContext和context,从而获取springbean和application范围的对象
Posted on 2015-10-12 20:14 Co7Co7 阅读(1144) 评论(0) 编辑 收藏 举报1、定义一个监听器[MyContextListener],此类里最主要获取springContext和context
package my.request; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** * @author chaox * @description 通过监听器获取springContext和context,此时普通类只需要提供get和set方法来获取springContext和context */ public class MyContextListener implements ServletContextListener { private ServletContext context = null; // 获取spring注入的bean对象 private WebApplicationContext springContext = null; @Override public void contextDestroyed(ServletContextEvent event) { // Output a simple message to the server's console System.out.println("The Simple Web App. Has Been Removed"); this.context = null; } // 这个方法在Web应用服务做好接受请求的时候被调用。 @Override public void contextInitialized(ServletContextEvent event) { this.context = event.getServletContext(); if (context == null) { System.out.println("获取ServletContext上下文失败!"); return; } ApplicationContextHelper.setServletContext(context); // context.setAttribute("xxxKey", "applicationScope"); // context.getAttribute("xxxKey"); springContext = WebApplicationContextUtils.getWebApplicationContext(this.context); if (springContext != null) { // 获取制定的Sprign的beanId=xxxManager的对象 // xxxManager = (XXXManager) springContext.getBean("xxxManager"); ApplicationContextHelper.setContext(springContext); } else { System.out.println("获取应用程序上下文失败!"); return; } //Output a simple message to the server's console System.out.println("The Simple Web App. Is Ready"); } public ServletContext getContext() { return context; } public void setContext(ServletContext context) { this.context = context; } public WebApplicationContext getSpringContext() { return springContext; } public void setSpringContext(WebApplicationContext springContext) { this.springContext = springContext; } }
2、定义一个普通类[ApplicationContextHelper],此类里最主要提供get和set方法来获取监听器中的springContext和context,从而获取springbean和application范围的对象
package my.request; import javax.servlet.ServletContext; import org.springframework.context.ApplicationContext; public class ApplicationContextHelper { private static ApplicationContext context = null; private static ServletContext servletContext = null; public static ApplicationContext getContext() { return context; } public static void setContext(ApplicationContext context) { ApplicationContextHelper.context = context; } public static ServletContext getServletContext() { return servletContext; } public static void setServletContext(ServletContext servletContext) { ApplicationContextHelper.servletContext = servletContext; } }
3、web.xml配置,需要注意ContextLoaderListener配置的位置需要在自定义的MyContextListener前,否则springContext=null
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 配置获取springContext和context --> <listener> <listener-class>my.request.MyContextListener</listener-class> </listener>