您的位置:首页 > 编程语言 > Java开发

struts2集成spring3的原理分析

2015-08-15 14:16 435 查看
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中了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: