Struts2+hibernate+spring 整合

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

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


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

<listener>
      <listener-class>
          org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>


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

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

</bean>

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

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

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

改为

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

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

5.4 整合Hibernate

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

1)        配置sessionFactory,让spring来创建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>


       这里创建了一个id为transactionManager的事务管理器,它匹配一个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(通知),对事务管理器进行事务设置,这里意思是指,对于以save、del、update开头的方法应用事务。

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

<aop:config>
      <aop:pointcut id="smMethod"
expression_r="execution(* test.service.impl.*.*(..))"/>
      <aop:advisor pointcut-ref="smMethod" advice-ref="smAdvice"/>
</aop:config>


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




     配置完毕
值得参考链接:http://www.cnitblog.com/intrl/archive/2010/01/15/56322.html
特别说明:
    1.因为slf4j-api-1.5.2.jar只有接口,还需要其实现类,而Hibernate带有的jar包中并没有包含,所以还需自己到apache网站下载

Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三slf4j-log4j12-1.5.2.jar
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三log4j-1.2.14.jar

两个jar包,一个是其实现,log4j-1.2.14.jar是slf4j-log4j12-1.5.2.jar所需要用到的jar包
2.在web.xml中配置过滤器,让Spring为我们自动管理session,无需我们手动开、关Hibernate中的session

Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    <filter>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-name>hibernateFilter</filter-name>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-class>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三            org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        </filter-class>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    </filter>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    <filter-mapping>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-name>hibernateFilter</filter-name>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <url-pattern>/*</url-pattern>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    </filter-mapping>

3、在web.xml中配置过滤器,处理字符集编码

Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    <filter>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-name>encodingFilter</filter-name>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-class>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三            org.springframework.web.filter.CharacterEncodingFilter
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        </filter-class>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <init-param>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三            <param-name>encoding</param-name>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三            <param-value>GBK</param-value>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        </init-param>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    </filter>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    <filter-mapping>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <filter-name>encodingFilter</filter-name>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三        <url-pattern>/*</url-pattern>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三    </filter-mapping>

4、在上一步中我们用到了aop,Spring本身并没有对其实现,而是使用了现成别人已经做好了的。需要引入两个jar包,在Spring中的 lib\aspectj 目录下

Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三aspectjrt.jar
Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合三aspectjweaver.jar

你可能感兴趣的:(spring,AOP,bean,Hibernate,配置管理)