ApplicationContext应用上下文获取方式
应用上下文对象是通过new ClassPathXmlApplicationContext(Spring配置文件)方式获取的,但是每次从容器中获取Bean时都要编写这一句话,这样的弊端是配置文件加载多次应用上下文对象创建多次。
那么,应该如何解决这个问题?
只需要在服务器启动时创建Spring容器,然后把他放到一个公共的地方比如ServletContext即可,这样所有的Servlet都可以访问到,从而获取Bean。
那么我们可以使用监听器来处理,在web项目中使用ServletContextListener监听web应用的启动,我们可以在web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到ServletContext域中,这样就可以在任意的位置从域中获取应用上下文对象ApplicationContext对象了。
第一步:自定义监听器来监听web应用,当应用启动时,加载Spring的注解配置类,创建Spring容器,然后存储到ServletContext中。

第二步:在web.xml中进行配置

第三步:修改Servlet中的代码,不再创建ApplicationContext,而是从ServletContext中获取

但是,我们注意到,在监听器中的核心配置类是写死的,如果以后要修改的话,就不方便,这时我们可以采取配置文件的方式替代。
这里要介绍web.xml中的全局参数,在web.xml中这样配置:

在代码中这样来获取web.xml中的全局初始化参数:

Spring提供获取上下文应用的工具
Spring提供了一个监听器ContextLoaderListener就是对上诉功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。
我们需要做的是:
(1)在web.xml中配置ContextLoaderListener监听器(导入spring-web包,监听器被放到这个包中)
(2)使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

