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事务配置详解 在软件开发领域,特别是Java企业级应用开发中,Spring与Hibernate作为两个重要的框架,常被一起使用来实现业务逻辑层的高效处理。其中,Spring提供了强大的依赖注入(DI)和面向切面编程(AOP...
### J2EE SSH事务配置详解 #### 一、引言 在J2EE(Java 2 Enterprise Edition)项目开发过程中,事务管理是非常重要的一个环节。它确保了数据的一致性和完整性,特别是在涉及到多个数据库操作时更为关键。SSH框架...
### SSH事务配置详解 #### 一、概述 SSH框架(Struts + Spring + Hibernate)是Java Web开发中非常流行的一种组合方案。它结合了MVC(Model-View-Controller)设计模式的优势,提供了灵活的数据访问层(Hibernate...
然而,本文探讨的“SSH整合5种方式”并非指SSH协议本身的五种使用方法,而是指如何将SSH与Spring框架进行整合的五种策略。Spring框架是Java平台上的一个开源框架,用于构建企业级应用程序,它提供了丰富的功能,包括...
接下来,我们将深入探讨SSH2的三种整合方式。 **一、全XML配置方式** 在全XML配置方式中,所有的配置信息,包括Struts2、Spring和Hibernate的设置,都写在XML文件中。这通常涉及到以下文件: 1. `struts.xml` - ...
在该文件中,需要指定 SSH 服务器的监听端口、身份验证方式等参数。 3. 配置 JDBC 驱动 在 Java 应用程序中,需要使用 JDBC 驱动来连接 SQLServer 数据库。JDBC 驱动需要配置 SSH tunnelling,以便通过 SSH 服务器...
这个"SSH零配置,完全注解方式工程"是一个示例项目,它展示了如何在不使用XML配置文件的情况下,通过Java注解来配置和使用SSH框架。 首先,Spring框架是应用上下文和依赖注入(DI)的核心。在传统配置中,我们会在...
- **安全性**:在配置JDBC连接时,确保数据库连接信息的安全存储,避免硬编码在配置文件中,考虑使用环境变量或加密方式存储敏感信息。 #### 五、总结 SSH框架的配置是一项复杂而细致的工作,涉及到多个组件的协调...
事务配置** 在SSH框架中,Spring提供了声明式事务管理。这允许开发者在XML配置文件中定义事务边界,而不是在代码中显式调用开始和结束事务。例如,可以在Spring的`applicationContext.xml`或`struts-config.xml`...
标题中的“ssh零配置_项目Demo”指的是使用SSH(Spring、Struts、Hibernate)三大框架进行开发时的无配置或最少配置方式。SSH是Java Web开发中常用的三个开源框架,它们分别是Spring负责依赖注入和事务管理,Struts...
在本项目中,SSH整合采用了纯注解的方式,省去了XML配置文件,使得开发过程更加简洁。同时,项目还包含了事务管理,确保数据的一致性,实现了零配置,这意味着开发者几乎无需手动配置就能快速启动和运行应用。 1. ...
否则,创建新的事务)和`SUPPORTS`(支持当前事务,如果不存在事务,则以非事务方式执行)等。 - **AOP配置**: - 定义了一个切入点(`bizMethods`),指定所有在`org.ssh.zf.biz`包下的方法都被拦截。 - 定义了一个...
SSH事务整合是Java后台开发中常见的一种技术组合,它涵盖了Spring、SpringMVC和Hibernate三个核心框架。这个项目展示了如何将这些组件有效地集成在一起,以实现一个完整的后端解决方案。 首先,Spring作为基础架构...
在Java Web开发中,SSH(Struts + Spring + Hibernate)框架组合是一种非常流行的轻量级企业级应用解决方案。它结合了Struts2的MVC架构模式、Spring的依赖注入与事务管理以及Hibernate的对象关系映射功能,能够有效...
在事务代理配置中,我们定义了四种类型的事务传播行为: - `PROPAGATION_REQUIRED`: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 - `PROPAGATION_SUPPORTS`: 支持当前事务,如果当前不...
1. **Struts2**: Struts2是一个用于构建基于Java EE Web应用的MVC框架,它提供了一种处理HTTP请求和响应的方式,使得开发者能够更专注于业务逻辑而不是底层细节。 2. **Spring**: Spring框架是一个全面的后端开发...
ssh框架事务管理applicationContext.xml配置文件
在本实例中,我们将探讨SSH框架的配置文件及其作用。 1. **log4j.properties**:这是日志记录的配置文件,基于Log4j框架。通过定义不同的日志级别(如DEBUG、INFO、WARN等)和输出目的地(控制台、文件、邮件等),...
4. **Hibernate注解**:Hibernate注解是ORM的一种方式,它允许在Java类和属性上直接添加元数据,从而避免了传统的XML配置。例如,`@OneToMany`、`@ManyToOne`用于处理一对多或多对一的关系,`@ManyToMany`处理多对多...