1,ContextLoaderListener
应用上下文以前是
ApplicationContext app =new ClassPathXmlApplicationContext(“applicationContext.xml”);这样获取的
加载xml配置文件创建容器
每次都会加载配置创建容器 我们想创建加载一次
用监听器放到ServletContext域中 ServletContextListener是监听ServletContext创建的
就可以从servletContext域中获取ApplicationContext对象了
这是自己实现监听器
在web.xml设置全局参数(设置应用上下文对象)配置监听器
<!--全局初始化参数-->
<!--<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>applicationContext.xml</param-value>
</context-param>-->
<!--配置监听器-->
<!--<listener>
<listener-class>com.flatly.listener.ContextLoaderListener</listener-class>
</listener>-->
<!--配置springMVC前端控制器-->
public class ContextLoaderListener implements ServletContextListener {
//服务器启动
public void contextInitialized(ServletContextEvent sce) {
// ApplicationContext app =new ClassPathXmlApplicationContext("applicationContext.xml");
//得到servletContext域
ServletContext servletContext = sce.getServletContext();
//读取webxml全局参数
String contextConfigLocation= servletContext.getInitParameter("contextConfigLocation");
ApplicationContext app =new ClassPathXmlApplicationContext(contextConfigLocation);
//将Spring应用上下文对象存储到ServletContext域中
servletContext.setAttribute("app",app);
System.out.println("spring容器创建完毕");
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
//这是返回应用上下文对象的工具
public class WebApplicationContextUtils {
//需要一个ServletContext域得到app
public static ApplicationContext getWebApplicationContext(ServletContext servletContext){
return (ApplicationContext) servletContext.getAttribute("app");
}
}
@WebServlet(value = "/userServlet")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
// ApplicationContext app = (ApplicationContext) servletContext.getAttribute("app");这里我们不期望还用写app所以创建了Util直接直接给你返回应用上下文对象
ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
UserService userService = app.getBean(UserService.class);
userService.save();
}
}
Spring提供应用上下文的工具
1.导入坐标
(**********)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
(**********)
在web.xml配置sprig监听器
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
使用
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletCon