struts2集成spring3的原理分析

来源:互联网 发布:mac 更改启动项 编辑:程序博客网 时间:2024/05/21 10:15
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中了。
0 0
原创粉丝点击