struts2整合spring

1.让spring提供一个对struts2的ObjectFactory的扩展

          需要添加struts2-spring-plugin-2.xxx.jar。在applicationContext.xml中添加
<bean id="userService" class="xxxxx" />
<bean id="springManageLogin" class="action类" scope="prototype">//告诉spring来管理action类的创建
<property name+"userService" ref="userService"/>//注入userService
</bean>
       默认情况下,spring Bean以单例形式创建,就是只创建一遍,下一次就直接拿以前创建好的对象。因为Struts2每一次请求都带有相关的数据,所以不适合单例,用scope=“prototype”来让spring每一次请求都创建一个实例。
       每一次请求springManageLogin,spring都会创建一个action实例,但是怎么让每一次创建action实例都由spring创造呢。只要在创建action实例的地方引用springManageLogin就行了。
<action name=""  method="" action="springManageLogin">//这样spring就会创建实例,不然就是struts2的objectFactory对象创建的。
<result></result>
</action>
      如果只是想注入依赖最好不要使用这种方法。如果想要使用spring的其他功能,例如面向方面的特性就可以使用这种方式。
 <constant name="struts.objectFactory" value="spring" />//在struts.xml中加入这句,就是改变struts的objectFactory,默认spring

2.使用自动连线将依赖注入

2.1使用name自动连线    

       spring自动连线的方式默认为name。就是匹配被管理的spring Bean的ID和潜在的目标对象的公开的设置方法的名字工作的。每一个Struts2创建的对象都是潜在的目标对象。
<bean id="userService" class=""/>//applicationContext.xml中只要配置需要注入的对象就行了,不用管理action实例
       spring 没有创建action实例,但是后再struts2创建完action实例后检查对象,自动连线spring Bean。自动连线时对象中要有注入对象的公开方法。
private UserService userService;//对象中要有这个公开方法才能自动连线。
public void serUserService(UserService userService){//设置方法的命名约定要与id匹配
this.userService=userService;
}

2.2通过type,constructor,auto自动连线

<constant name="struts.objectFactory.spring.autoWire" value="type"/>//在struts.xml中加入这句可以改变自动连线方式,默认name
        type:spring匹配它知道的对象类型和struts2对象设置方法类型,他比较的是设置方法内部参数类型是不是和spring Bean类型匹配,它是按照接口统计的。spring Bean配置的class是接口实现类,自动连线时就为接口的类型去匹配。
       constructor:对象要有一个构造方法,构造方法把依赖对象作为参数。跟type类型一样,匹配到多个Bean,会报异常。
       auto:先按照constuctor方式,再按照type方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值