struts+hibernate+spring的整合

 

     struts,hinbernate,spring是当前java web项目很流行的框架,本文简单介绍一下整合的方法,并说一说其中一些需要注意的地方,作为自已的小小总结。

     先说与struts1.x的整合,struts1.x+hibernate+spring架构中,我以为struts是它们的核心,因为控制层是由struts来担当的,包括各种配置的载入,请求的分发。而hibernate与数据库打交道,给model层提供了一个对象化操作数据的接口。spring的作用就比较灵活,可以选择性的使用它的一些功能。大家知道它的一大特性是依赖注入,struts+spring中有哪些注入点呢?

1、在action中注入要调用的model层的类。

在单独使用struts的环境下action对应的类是在struts-config.xml中配置的,由于action中要注入别的类,这个实例的配置的一部分就要在spring的配置中完成,其逻辑是struts 把action的句字交给spring,spring安照名字提供相对应的action实例,当然,由spring供出来实例已经由它注入了需要的实例对象。看以下配置:

sturst里的配置:

  <action path="/register"
             attribute="registerform"
          name="registerform"
          input="register.jsp"
          scope="request"
  type="org.springframework.web.struts.DelegatingActionProxy">
      <forward name="success" path="/success.jsp"/>
    </action>
   </action-mappings>

。。。。

   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
  </plug-in>

以上第二段配置是导入spring的配置文件

spring中的配置:

<bean name="/register" class="com.struts.action.RegisterAction"
  autowire="byName">
 </bean>

2、在model层里注入dao实例

下面说说hibernate+spring整合,spring与hibernate整合时,用到了spring的两个功能,其一是如上所说的依赖注入功能,把session工厂实例注入dao中。其二是他的aop功能,hibernate的事务处理可以交给spring,我们配置一下就可以,只要有数据操作的地方就会调用事务,这就是aop,也就所谓的横切编程,将代码中的横切关注点抽离了出来,放在一起统一处理,提高重用性也方便管理。aop的大致原理就是这样,这中间充分利用了java的反射机制,具体它如何来实现,还待来日细考。

下面是事务配置的一个参考实现:

<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <bean id="baseTransaction"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  abstract="true">
  <property name="transactionManager">
   <ref local="transactionManager" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="add*">PROPAGATION_REQUIRED</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>

spring的功能之一是依赖注入,写程序有时也跟风,大家说依赖注入好,于是跟着说好,跟着用,至于好在哪里,有时却莫名奇妙,这样做是很有可能陷入使用的误区。诚然,初学时不可能一看书就全部了然,但在学习的时候要有一定的思考,知其然,然后思其所以然,写在此以自勉。spring的依赖注入功能要配合接口编程,否则感觉没什么意义,通过接口编程,减少了耦合度,对配置中对要注入的实例可以灵活安排。

在整合的时候要注意包的选择,版本不匹配将导致无法启动

struts2.0+hibernate+spring的整合与上面大同小异,差别在spring配置文件的导入方式不同。它在web.xml里进行如下配置:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:com/spring/config/applicationContext*.xml</param-value>
 </context-param>
 <listener>
  <listener-class>
   org.springframework.web.context.ContextLoaderListener
  </listener-class>
 </listener>

ok,先写到这儿吧

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值