关于Spring ApplicationContext
1. 从字面上看ApplicationContext就是Application级别的Context(上下文,上下文一般会包含系统级别的请求参数,自定义的数据对象等等),在Spring中ApplicationContext是Java Bean的基础容器,其具体支持的功能列举如下:
- 通过提供Bean工厂方法来访问应用程序组件(Application Components);
- 提供通用的方式来访问文件资源(File Resources);
- 发布事件到已注册的监听器(Registered Listeners);
- 对I18N消息的访问处理(Internationalization);
- 载入多个(有继承关系)上下文,使得每个上下文都专注于一个特定的层次,比如应用的WEB层。
Spring 为ApplicationContext提供三种实现方式
1. ClassPathXmlApplicationContext(只能读放在WEB-INF/classes目录下的配置文件,如果要使用绝对路径,需要加上file:前缀表示这是绝对路径;);
2. FileSystemXmlApplicationContext(没有盘符的是项目工作路径,即项目的根目录;有盘符表示的是文件绝对路径.);
3. XmlWebApplicationContext(专应用于WEB项目)
Struts2与Spring整合
目的:
1、WEB应用启动的时候自动获取Spring的ApplicationContext(根据web.xml的相关配置);
2、 让Spring为Struts2的Action注入所需的资源对象(一般为业务逻辑的Service组件,这些Servcie组件是面向接口的,也就是说在Struts2的Action类中我们仅仅只需关注Service组件的接口而不用关心起实现,具体实现类及其依赖由Spring来实例化);
原理:
只要导入了Struts2的spring插件包(struts2-spring-plugin-version.jar),不需要进行任何额外的配置,Struts2的Action实例对象将由Struts2的Spring插件创建,该插件会按照Action的属性名称自动从Spring容器中查找相同名称的Bean对象对Action进行装配。
实现:
1、 在Maven的pom.xml中新增一个依赖(以便项目引用struts2-spring-plugin-version.jar):
2、 在web.xml中新增配置项
l Spring上下文配置文件的位置;
l org.springframework.web.context.ContextLoaderListener创建出WebApplicationContext容器对象,并将创建出来的WebApplicationContext对象存储进了Web应用程序的application作用域中,存储时的key为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE这个常量表示的字符串,以后在Web应用程序中就可以使用application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)语句,或Spring提供的工具方法WebApplicationContextUtils.getWebApplicationContext(application)来获得 spring容器对象。ContextLoaderListener使用contextConfigLocation这个ServletContext初始化参数来指定WebApplicationContext容器对象的配置文件,如果没有配置contextConfigLocation这个ServletContext的初始化参数,ContextLoaderListener则默认使用/WEB-INF /applicationContext.xml作为配置文件。
3、在Spring配置文件:spring-config.xml中注入相关Action的依赖
可以看到,TestAction这个Struts2的Action类所依赖的Service组件由Spring配置文件来配置并由Spring IoC容器来实现依赖注入。
4、在Struts2的Action类中通过Annotation来指定Spring中配置的BeanId(testAction)