深入详解Struts2——Struts2对依赖注入的支持

依赖注入又名控制反转,控制反转就是由容器控制对象之间的关系,而非传统实现中,由程序代码直接操控。控制权由应用程序转移到了外部容器中。
依赖注入将对象创建和对象链接的责任从对象自身转移到了IOC容器,由容器在运行期间将对象之间的依赖关系注入到对象之中。
struts2通过插件的形式来集成Spring,插件的Jar文件包含在struts-spring-plugin-2.0.11.jar的文件中。

<struts>
<!--定义Spring 的ObjectFactory-->
<bean type="com.opensymphony.xwork2.0.ObjectFactory"
  name='spring"
 class="org.apache.struts2.spring.StrutsSpringObjectFactory"/>
<!--   将Spring的ObjectFactory-设置为Struts2默认的ObjectFactory-->
<constant name="struts.objectFactory" valu="spring"/>
<!--定义spring-default包-->
<package name="spring-default">
<!--配置拦截器列表-->
<interceptors>
  <interceptor name="autowiring"
                        class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>    
  <interceptor name="sessionAutowiring"
                        class="org.apache/struts2.spring.interceptor.SessionContextAutowiringInterceptor"/
</interceptors>
</package>
</struts>

Spring插件通过覆盖Struts2的ObjectFactory来工作,增强核心框架对象的创建,配置后struts2框架将使用Spring来创建他的所有对象。
注册程序的依赖注入配置如下:

<bean id="userDao" class="org.struts.persistence.dao.UserDao" />
<bean id="registerAction" class="org.struts.action.RegisterActin" scope="prototype" >
    <property name="userDao" ref="userDao" />
</bean>

每当一个请求到来的时候,Struts2就创建一个新的Action实例对请求进行处理。这是和Struts1的Action不同的地方,因此在编写Struts1的Action时要注意线程安全问题。由于struts2中的Action是多实例的,而Spring IOC容器默认只创建bean累的唯一实例(通过缓存的bean的实例来重复使用),为此我们需要将scope属性设置为prototype,以告诉Spring IOC容器在每次需要Action实例时都创建一个新的。
使用property元素,通过属性(property)的setter方法,向Action实例注入依赖的对象,在这里就是userDao,name属性指定bean类中属性(property)的名字,ref属性指定引用的对象,他的值和UserDao的id值一致。
默认的自动装备策略通过struts2的struts.objectFactory.spring.autoWire属性进行设置,在default.properties中,该属性的值是name,也就是根据名字进行自动装配,这要求Action的属性名和Spring中的bean的名字要一致。
要在struts2程序中集成Spring,除了需要Spring插件的Jar包和Spring的类库外,还需要在web.xml文件中配置Spring的监听器:

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值