S2SH配置过程 详解(5)

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

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

你可能感兴趣的:(spring,Hibernate,bean,struts,session,action)