问题 如果将applicationContext直接放到servlet中,那么每一次访问就会创建一个applicationContext这样的话,如果请求过多,spring的容器就会重复创建多个重复的对象,这样肯定不行。
解决
- web项目中容器对象只需要创建一次,把容器对象放到全局作用域ServletContext中。
- 实现:
- 使用监听器,当全局作用域对象被创建的时候,创建容器 存入到ServletContext
- 监听器作用:
- 创建内容器对象,执行ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”)
- 把容器对象放入到ServletCotext,ServletContext.steAttribute(key,ac);
- 监听器可以自己创建,也可以使用框架中提供的ContextLoaderListener
- 在pom.xml配置文件中加入spring-web依赖
- 在web.xml文件中注册监听器
-
//监听器被创建对象后,会读取、WEB-INF/applicationContext.xml文件。 //为什么要读取这个文件:因为在监听器中床架ApplicationContext对象,需要加载配置问价 //WEB-INF/applciationContext.xml就是监听器默认读取的spring配置文件路径,一般不用默认的,可以修改配置项,使用context-param重新指定文件位置 <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>
使用监听器创建好的sprign容器对象
webApplicationContext ac = null;
ServletContext sc = getServletContext();
ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);