一、Spring的IOC容器如何在WEB中创建?
①非WEB应用在main方法中直接创建 IOC 容器
②WEB应用中,IOC应该在服务器加载时就创建 IOC 容器
所以我们需要用到ServletContextListener监听器类,在初始化服务器方法 contextInitialized(ServletContextEvent sce) 中创建 IOC 容器
③在WEB应用的其他组件中如何来访问 IOC 容器呢?
我们只需要在监听器中将创建好的IOC容器放入到 ServletContext 域对象中即可
这些想法,Spring已经帮我们做好了,我们只需这样操作,如下:
①、导入jar包 spring-web-4.0.0.RELEASE.jar ,Spring将以上操作实现在jar包中
②、在web.xml文件中配置 ContextLoaderListener 监听器
这个监听器实现了 ServletContextListener 接口,当服务器启动时,创建ServletContext域对象,会执行该监听器中的contextInitialized方法
进入 initWebApplicationContext方法中,发现它创建好 IOC 容器后存放到servletContext域对象中
③、那么它是如何获取到Spring的配置文件的呢?
在web.xml中配置context-param
这样配置了之后呢,就会在 IOC 创建后会根据 Spring 配置文件所设置
ServletContext会获取web.xml中的 param-name为 contextConfigLocation 的值,即applicationContext.xml配置文件
IOC容器就这样创建完毕了
二、Spring的IOC容器如何在WEB中获取?
获取IOC容器的源码:
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE就是IOC容器对象在ServletContext域中的Key