S2SH配置过程 详解(5)

本文介绍如何使用Spring框架整合Struts与Hibernate,包括配置步骤和关键代码示例。通过整合,可以实现Action类的统一管理和对Hibernate Session的生命周期控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.3 整合Struts

       SpringStruts的整合其实就是把StrutsAction类交给Spring来管理,下面开始吧!

1)        导入jar包。在Struts2.1.6lib目录中找到struts2-spring-plugin-2.1.6.jar,引入到工程中。

2)        配置web.xml文件。在web.xml中加入以下代码:
 

<listener>

     
<listener-class>

         org.springframework.web.context.ContextLoaderListener

     
</listener-class>

 
</listener>


 

1)        现在就来看如何把strutsaction交给spring。以struts示例中的login.action为例,首先创建一个LoginAction类的Bean。在applicationContext.xml中增加如下代码:

<bean id="loginAction" class="test.action.LoginAction" scope="prototype">

</bean>

这里,我们把这个beanid设为loginActionScope设为prototype,含义是每一次请求创建一个LoginAction类的实例,Scope还有另一个值“singleton”意为“单例模式”。

 

接下来修改struts.xml文件,把原来login.action的配置做如下修改:

<action name="login" class=" test.action.LoginAction ">

改为

<action name="login" class="loginAction">

注意到有什么区别了吗?class值设为了loginAction,即LoginAction类的beanID。这样我们就把LoginAction类交给了spring管理。至于具体是怎么处理的,秘密在struts2-spring-plugin-2.1.6.jar中,有空自己就去研究吧,现在会用就可以了。 

5.4 整合Hibernate

       Spring整合Hibernate主要是对hibernateSession进行管理,包含Session的创建、提交、关闭的整个生命周期。Spring对事务的管理应用了AOP的技术,配置前请先了解一下AOP的知识。

1)        配置sessionFactoryspring来创建Session。在applicationContext.xml中增加如下代码:

<!-- 配置sessionFactory -->

 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

     
<property name="configLocation">

         
<value>classpath:spring/hibernate.cfg.xml</value>

     
</property>   

 
</bean>   

 

       我们原来是用HibernateSessionFactory.java来创建Session的,现在删除即可,交给Spring创建。这里,创建了一个Session工厂类的Bean,其ID为“sessionFactory”。

2)        配置事务管理器。增加如下代码:

 <!-- 配置事务管理器 -->

 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

     
<property name="sessionFactory">

         
<ref bean="sessionFactory"/>

     
</property>   

 
</bean>

 

       这里创建了一个idtransactionManager的事务管理器,它匹配一个session工厂,<ref bean="sessionFactory"/>这个sessionFactory是指session工厂的ID

3)        对事务管理器进行事务设置。增加如下代码:

<tx:advice id="smAdvice" transaction-manager="transactionManager">

     
<tx:attributes>

         
<tx:method name="save*" propagation="REQUIRED"/>

         
<tx:method name="del*" propagation="REQUIRED"/>

         
<tx:method name="update*" propagation="REQUIRED"/>

     
</tx:attributes>

 
</tx:advice>

 

       这里创建了一个advice(通知),对事务管理器进行事务设置,这里意思是指,对于以savedelupdate开头的方法应用事务。

4)        下面就把事务应用到具体的类。看如下代码:

<aop:config>

     
<aop:pointcut id="smMethod" 

expression
="execution(* test.service.impl.*.*(..))"/>

     
<aop:advisor pointcut-ref="smMethod" advice-ref="smAdvice"/>

 
</aop:config>

 

       这里配置的作用是把我们上面创建的advice应用到具体的类中。以上代码的意思指,给test.service.impl下的所有类的所有方法应用smAdvice

5)        示例:使用Session

     配置基本完毕了,自己去测试吧,这里就不先写了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值