Struts2与Spring进行集成的主要是为了使用 Spring的依赖注入和控制反转特性来实例struts2的对象,如Action,Interceptor,Result等。
它们的集成方法非常简单,只需要在项目的类路径中加入struts2的spring插件包,无需额外配置。当然web.xml不能缺少struts和spring的初始化配置。
web.xml中的struts、spring配置具体如下:
<!-- Spring3 Listener -->
<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>
<!-- Struts2 Filters -->
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对于以上配置,我简单简单分析一下,项目启动时,spring通过listener初始化并注入ApplicationContext到application中,而struts则是通过过滤器实现初始化的。
二者集成原理如下:struts2在初始化时,会自动载入struts2的spring插件包中的struts-plugin.xml配置文件,该文件通过以下配置指定struts的ObjectFactory为插件中StrutsSpringObjectFactory类。
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory" value="spring" />
在未集成spring时,struts的action实例化是由ObjectFactory工厂类处理,有了以上的配置后,就相当于将实例工作转交给StrutsSpringObjectFactory工厂类了。
StrutsSpringObjectFactory工厂类继承至SpringObjectFactory类,该类在创建bean时使用spring的WebApplicationContext容器进行。该容器在项目启动时就已经注入application中了。
它们的集成方法非常简单,只需要在项目的类路径中加入struts2的spring插件包,无需额外配置。当然web.xml不能缺少struts和spring的初始化配置。
web.xml中的struts、spring配置具体如下:
<!-- Spring3 Listener -->
<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>
<!-- Struts2 Filters -->
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对于以上配置,我简单简单分析一下,项目启动时,spring通过listener初始化并注入ApplicationContext到application中,而struts则是通过过滤器实现初始化的。
二者集成原理如下:struts2在初始化时,会自动载入struts2的spring插件包中的struts-plugin.xml配置文件,该文件通过以下配置指定struts的ObjectFactory为插件中StrutsSpringObjectFactory类。
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory" value="spring" />
在未集成spring时,struts的action实例化是由ObjectFactory工厂类处理,有了以上的配置后,就相当于将实例工作转交给StrutsSpringObjectFactory工厂类了。
StrutsSpringObjectFactory工厂类继承至SpringObjectFactory类,该类在创建bean时使用spring的WebApplicationContext容器进行。该容器在项目启动时就已经注入application中了。