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

来源:互联网 发布:广州发货的淘宝卖家 编辑:程序博客网 时间:2024/06/03 21:31

依赖注入又名控制反转,控制反转就是由容器控制对象之间的关系,而非传统实现中,由程序代码直接操控。控制权由应用程序转移到了外部容器中。
依赖注入将对象创建和对象链接的责任从对象自身转移到了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>
0 1
原创粉丝点击