`
fanjf
  • 浏览: 332863 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

SSH事务配置的四种方式

    博客分类:
  • SSH
 
阅读更多

SSH事务配置的四种方式:

 

<!-- 定义事务管理器(声明式的事务) -->
     <bean id="transactionManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory">
       <ref local="sessionFactory" />
      </property>
     </bean>

    <!-- 业务逻辑层(是对各个DAO层的正面封装)主要用到<<门面模式>> -->
     <bean id="fundService"
      class="com.jack.fund.service.serviceimpl.FundService">
      <property name="operdao"><ref bean="operatorDAO" /></property>
      <property name="producedao"><ref bean="fundProduceDAO" /></property>
      <property name="customerdao"><ref bean="customerDAO" /></property>
      <property name="accountdao"><ref bean="accountDAO" /></property>
      <property name="fundaccountdao"><ref bean="fundAccountDAO" /></property>
      <property name="fundtransdao"><ref bean="fundTransDAO" /></property>
     </bean>

    可能还有其他很多模块。<bean id="fundService"/>可能只是其中的模块。

第一种:配置声明式事务的方法如下。也是我们最常用的方法了,它适用于你的库表比较少的情况下。

    <bean id="fundServiceDAOProxy"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <!-- 配置事务管理器 -->
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
      <!-- 此属性指定目标类本身是否是代理的对象.如果目标类没有实现任何类,就设为true代表自己 -->
      <property name="proxyTargetClass">
       <value>false</value>
      </property>
      <property name="proxyInterfaces">
       <value>com.jack.fund.service.IFundService</value>
      </property>
      <!-- 目标bean -->
      <property name="target">
       <ref bean="fundService" />
      </property>
      <!-- 配置事务属性 -->
      <property name="transactionAttributes">
       <props>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="add*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="save*">PROPAGATION_REQUIRED</prop>
        <prop   key="find*">PROPAGATION_REQUIRED,readOnly</prop>
       </props>
      </property>
     </bean>
     以下可能还有其他的xxxServiceDAOProxy.大家可以看出针对每一个功能模块配置一个业务代理服务。如果模块多大话,就显得代码有点多了,发现他们只是稍微一点不一样。这时我们就应该想到继承的思想。用第二种方法。

第二种:配置声明式事务的方法如下。这种情况适合相对比较多的模块时使用。

    <!-- 利用继承的思想简化配置,要把abstract="true" -->
     <bean id="transactionBase"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
      lazy-init="true" abstract="true">
      <!-- 配置事务管理器 -->
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
      <!-- 配置事务属性 -->
      <property name="transactionAttributes">
       <props>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="add*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="save*">PROPAGATION_REQUIRED</prop>
        <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
       </props>
      </property>
     </bean>
    而具体的模块可以简单的这样配置。
    只要指明它的parent(父类)就可以了。
    父类一般把abstract="true",因为在容器加载的时候不需要初始化,等到用的时候再有它的子类调用的时候,再去初始化。
    <bean id="fundServiceDAOProxy" parent="transactionBase" >
      <property name="target">
      <ref bean="fundService" />
      </property>
     </bean>
    这样配置的话,如果有多个像fundService这样模块时,可以少些很多重复的代码。

第三种:配置声明式事务的方法如下。主要利用BeanNameAutoProxyCreator自动创建事务代理

      <bean id="transactionInterceptor"
      class="org.springframework.transaction.interceptor.TransactionInterceptor">
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
      <!-- 配置事务属性 -->
      <property name="transactionAttributes">
       <props>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="add*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="save*">PROPAGATION_REQUIRED</prop>
        <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
       </props>
      </property>
     </bean>

     <bean
      class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      <property name="beanNames">
       <list>
        <value>fundService</value>
       </list>
      </property>
      <property name="interceptorNames">
       <list>
        <value>transactionInterceptor</value>
       </list>
      </property>
     </bean>
    这种方法主要利用了拦截器的原理。

    前三种方法一般都必需指定具体的模块bean.
    如果模块过多话,比如一个大型的网站一般有几十个模块,我们就得考虑用第四种的配置方式了。自动创建事务代理的方式了。

第四种:配置声明式事务的方法如下。

    <bean id="transactionInterceptor"
      class="org.springframework.transaction.interceptor.TransactionInterceptor">
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
    </bean>

    <!-- 自动代理 -->
     <bean id="autoproxy"
      class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      <!-- 可以是Service或DAO层(最好是针对业务层*Service) -->
      <property name="beanNames">
       <list>
        <value>*Service</value>
       </list>
      </property>
      <property name="interceptorNames">
       <list>
           <value>transactionInterceptor</value>
       </list>
      </property>
     </bean>

    自动代理还有一种用法就是结合正则表达式和advice使用。

    <bean id="transactionInterceptor"
      class="org.springframework.transaction.interceptor.TransactionInterceptor">
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
    </bean>

     <bean id="autoProxyCreator"
      class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" >
     </bean>

    <bean id="regexpMethodPointcutAdvisor"
      class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
      <property name="advice">
      <ref bean="transactionInterceptor" />
      </property>
      <property name="pattern">
      <value>.*</value>
      </property>
     </bean>

      这个方法可以针对具体的模块进行拦截并进行事务处理。

    在你的实际项目中,你可以根据你的情况选用不同的方法。

分享到:
评论

相关推荐

    SSH事务配置大全

    ### SSH事务配置详解 在软件开发领域,特别是Java企业级应用开发中,Spring与Hibernate作为两个重要的框架,常被一起使用来实现业务逻辑层的高效处理。其中,Spring提供了强大的依赖注入(DI)和面向切面编程(AOP...

    J2EE SSH事务配置

    ### J2EE SSH事务配置详解 #### 一、引言 在J2EE(Java 2 Enterprise Edition)项目开发过程中,事务管理是非常重要的一个环节。它确保了数据的一致性和完整性,特别是在涉及到多个数据库操作时更为关键。SSH框架...

    ssh事务配置.txt

    ### SSH事务配置详解 #### 一、概述 SSH框架(Struts + Spring + Hibernate)是Java Web开发中非常流行的一种组合方案。它结合了MVC(Model-View-Controller)设计模式的优势,提供了灵活的数据访问层(Hibernate...

    ssh整合 5种方式

    然而,本文探讨的“SSH整合5种方式”并非指SSH协议本身的五种使用方法,而是指如何将SSH与Spring框架进行整合的五种策略。Spring框架是Java平台上的一个开源框架,用于构建企业级应用程序,它提供了丰富的功能,包括...

    ssh2三种整合方式

    接下来,我们将深入探讨SSH2的三种整合方式。 **一、全XML配置方式** 在全XML配置方式中,所有的配置信息,包括Struts2、Spring和Hibernate的设置,都写在XML文件中。这通常涉及到以下文件: 1. `struts.xml` - ...

    sqlserver数据库SSH配置1

    在该文件中,需要指定 SSH 服务器的监听端口、身份验证方式等参数。 3. 配置 JDBC 驱动 在 Java 应用程序中,需要使用 JDBC 驱动来连接 SQLServer 数据库。JDBC 驱动需要配置 SSH tunnelling,以便通过 SSH 服务器...

    SSH零配置,完全注解方式工程

    这个"SSH零配置,完全注解方式工程"是一个示例项目,它展示了如何在不使用XML配置文件的情况下,通过Java注解来配置和使用SSH框架。 首先,Spring框架是应用上下文和依赖注入(DI)的核心。在传统配置中,我们会在...

    SSH详细配置文件(自己个人经验)

    - **安全性**:在配置JDBC连接时,确保数据库连接信息的安全存储,避免硬编码在配置文件中,考虑使用环境变量或加密方式存储敏感信息。 #### 五、总结 SSH框架的配置是一项复杂而细致的工作,涉及到多个组件的协调...

    在SSH中使用事物包括SSH的搭建和配置;事务的配置;注释详细。(完整项目)

    事务配置** 在SSH框架中,Spring提供了声明式事务管理。这允许开发者在XML配置文件中定义事务边界,而不是在代码中显式调用开始和结束事务。例如,可以在Spring的`applicationContext.xml`或`struts-config.xml`...

    ssh零配置_项目Demo

    标题中的“ssh零配置_项目Demo”指的是使用SSH(Spring、Struts、Hibernate)三大框架进行开发时的无配置或最少配置方式。SSH是Java Web开发中常用的三个开源框架,它们分别是Spring负责依赖注入和事务管理,Struts...

    SSH整合,纯注解,包含事务,零配置

    在本项目中,SSH整合采用了纯注解的方式,省去了XML配置文件,使得开发过程更加简洁。同时,项目还包含了事务管理,确保数据的一致性,实现了零配置,这意味着开发者几乎无需手动配置就能快速启动和运行应用。 1. ...

    SSH框架配置+Ajax关键代码

    否则,创建新的事务)和`SUPPORTS`(支持当前事务,如果不存在事务,则以非事务方式执行)等。 - **AOP配置**: - 定义了一个切入点(`bizMethods`),指定所有在`org.ssh.zf.biz`包下的方法都被拦截。 - 定义了一个...

    ssh事务整合

    SSH事务整合是Java后台开发中常见的一种技术组合,它涵盖了Spring、SpringMVC和Hibernate三个核心框架。这个项目展示了如何将这些组件有效地集成在一起,以实现一个完整的后端解决方案。 首先,Spring作为基础架构...

    idea配置ssh框架

    在Java Web开发中,SSH(Struts + Spring + Hibernate)框架组合是一种非常流行的轻量级企业级应用解决方案。它结合了Struts2的MVC架构模式、Spring的依赖注入与事务管理以及Hibernate的对象关系映射功能,能够有效...

    ssh事务处理

    在事务代理配置中,我们定义了四种类型的事务传播行为: - `PROPAGATION_REQUIRED`: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 - `PROPAGATION_SUPPORTS`: 支持当前事务,如果当前不...

    SSH Framework 配置实例

    1. **Struts2**: Struts2是一个用于构建基于Java EE Web应用的MVC框架,它提供了一种处理HTTP请求和响应的方式,使得开发者能够更专注于业务逻辑而不是底层细节。 2. **Spring**: Spring框架是一个全面的后端开发...

    ssh框架事务管理applicationContext.xml配置文件

    ssh框架事务管理applicationContext.xml配置文件

    ssh框架配置文件的实例

    在本实例中,我们将探讨SSH框架的配置文件及其作用。 1. **log4j.properties**:这是日志记录的配置文件,基于Log4j框架。通过定义不同的日志级别(如DEBUG、INFO、WARN等)和输出目的地(控制台、文件、邮件等),...

    SSH整合项目 配置文件 注解

    4. **Hibernate注解**:Hibernate注解是ORM的一种方式,它允许在Java类和属性上直接添加元数据,从而避免了传统的XML配置。例如,`@OneToMany`、`@ManyToOne`用于处理一对多或多对一的关系,`@ManyToMany`处理多对多...

Global site tag (gtag.js) - Google Analytics