S详细讲解SH中Spring事务流程

合集下载

Spring声明式事务详解

Spring声明式事务详解

Spring声明式事务详解Spring 中的事务控制⽅式Spring 的事务控制可以分为编程式事务控制和声明式事务控制编程式开发者直接把事务的代码和业务代码耦合到⼀起,在实际开发中不⽤。

声明式开发者采⽤配置的⽅式来实现的事务控制,业务代码与事务代码实现解耦合,使⽤的API思想。

基于XML的声明式事务控制【重点】在 Spring配置⽂件中声明式的处理事来代替代码式的处理事务。

底层采⽤ AOP 思想来实现的。

声明式事务控制明确事项:核⼼业务代码(⽬标对象)事务增强代码{ Spring已提供事务管理器)切⾯配置步骤分析1.引⼊tx 命名空间2.事务管理器通知配置3.事务管理器AOP配置引⼊依赖坐标<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beanshttps:///schema/beans/spring-beans.xsd/schema/contexthttps:///schema/context/spring-context.xsd/schema/aophttps:///schema/aop/spring-aop.xsd/schema/txhttps:///schema/tx/spring-tx.xsd"></beans>基于 XML 的声明式事务的控制配置⽂件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beanshttps:///schema/beans/spring-beans.xsd/schema/contexthttps:///schema/context/spring-context.xsd/schema/aophttps:///schema/aop/spring-aop.xsd/schema/txhttps:///schema/tx/spring-tx.xsd"><!-- 开启 IOC 注解扫描 --><context:component-scan base-package="inly"/><!-- 引⼊ properties ⽂件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置数据源 --><bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${ername}"/><property name="password" value="${jdbc.password}"/></bean><!-- jdbcTemplate --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!-- 绑定数据源 --><property name="dataSource" ref="datasource"/></bean><!-- 事务管理器对象 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源对象 --><property name="dataSource" ref="datasource"/></bean><!-- 通知增强 transaction-manager: 配置的事务管理器对象 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 定义⼀些事务属性 --><tx:attributes><!-- * 表⽰当前任意名称的⽅法都⾛默认的配置 --><tx:method name="*"/></tx:attributes></tx:advice><!-- AOP 配置切⾯ --><aop:config><!-- 配置声明式式务 --><aop:advisor advice-ref="txAdvice" pointcut="execution(* erServiceImpl.updateUser(..))"/></aop:config></beans>Service 层@Overridepublic void updateUser() {User user = userDao.find(2);user.setName("li3");userDao.updateUser(user);int i = 1 / 0;user.setAge(13);userDao.updateUser(user);System.out.println(user);}事务参数的配置详解<tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" timeout="-1" read-only="false"/> name:切点⽅法等isolation:事务的隔离级别propogation:事务的传播⾏为timeout:超时时间read-only:是否只读常⽤ CURD 配置<tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 定义⼀些事务属性 --><tx:attributes><!-- CRUD 常⽤配置表⽰以update开头的⽅法--><tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1"/> <tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1"/><tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" timeout="-1"/> <tx:method name="find" read-only="true"/><!-- * 表⽰当前任意名称的⽅法都⾛默认的配置 --><tx:method name="*"/></tx:attributes></tx:advice>基于注解的声明式事务控制常⽤注解步骤分析修改 Service 层,增加事务注解@Override@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ,readOnly = false,timeout = -1) public void updateUser() {User user = userDao.find(2);user.setName("li3");userDao.updateUser(user);int i = 1 / 0;user.setAge(13);userDao.updateUser(user);System.out.println(user);}修改 Spring 核⼼配置⽂件,开启事务注解⽀持<tx:annotation-driven/>。

spring流程

spring流程

spring流程Spring框架是一个轻量级的开发框架,主要用于构建Java企业级应用程序。

它提供了一套完整的解决方案,使得开发人员可以更加便捷地开发、测试和部署应用程序。

Spring框架的流程主要包括配置、依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及测试等几个步骤。

首先,配置是Spring框架的首要任务。

Spring框架通过XML 或者注解来配置和管理应用程序的各个组件。

配置文件包含了应用程序需要的依赖关系、Bean定义以及其他的配置信息。

接下来,依赖注入是Spring框架的核心特性之一。

它是通过容器将各个组件进行装配的过程。

在Spring框架中,组件之间的依赖关系由容器来管理,开发人员只需要定义好组件的接口和实现,然后在配置文件中声明依赖关系即可。

AOP(面向切面编程)是Spring框架的另一个重要特性。

它允许开发人员通过切面来处理系统中的横切关注点,如事务管理、日志记录等。

借助AOP,开发人员可以更加方便地解耦系统中的不同模块,提高代码的可维护性和可扩展性。

MVC(模型-视图-控制器)是Spring框架的另一大亮点。

它提供了一种灵活而高效的架构模式,可以有效地将应用程序的业务逻辑、数据和显示进行分离。

Spring框架通过DispatcherServlet来处理客户端的请求,并将其分发给相应的控制器进行处理。

控制器通过模型的方式来访问数据,并将结果返回给视图进行展示。

最后,测试是Spring框架中不可或缺的一部分。

Spring框架提供了一套完整的测试框架,使得开发人员可以方便地对应用程序进行单元测试、集成测试以及性能测试。

通过测试,开发人员可以及早地发现和解决问题,提高应用程序的质量和稳定性。

综上所述,Spring框架的流程主要包括配置、依赖注入、AOP、MVC以及测试等几个步骤。

通过这些步骤,开发人员可以更加方便地开发、测试和部署Java企业级应用程序。

Spring框架以其灵活、高效和易用的特性,被广泛应用于Java开发领域。

spring运行流程

spring运行流程

spring运行流程Spring是一个开源的轻量级Java框架,它提供了全面的基础设施支持,使得Java应用的开发变得更加简单和高效。

Spring框架的核心是IoC(控制反转)和AOP(面向切面编程),它们为应用程序的开发提供了强大的支持。

在本文中,我们将深入探讨Spring框架的运行流程,帮助大家更好地理解Spring框架的工作原理。

首先,让我们来了解一下Spring框架的IoC容器。

IoC容器是Spring框架的核心,它负责管理应用程序中的所有对象。

在Spring框架中,所有的对象都由IoC容器来创建和管理,开发人员只需要通过配置文件或注解来描述对象之间的依赖关系,而不需要手动去创建和管理这些对象。

这种将对象的创建和管理交给IoC容器来完成的方式,称为控制反转。

通过IoC容器,Spring框架能够实现松耦合,提高代码的可维护性和可测试性。

接下来,让我们来看一下Spring框架的AOP功能。

AOP是Spring框架的另一个核心功能,它允许开发人员在不改变原有业务逻辑的情况下,通过横切关注点的方式来增强应用程序的功能。

在Spring框架中,AOP通过切面(Aspect)和通知(Advice)来实现。

开发人员可以通过定义切面和通知,将横切关注点的逻辑与业务逻辑分离开来,从而提高代码的重用性和可维护性。

在Spring框架中,Bean是一个非常重要的概念。

Bean是Spring框架中的一个对象,它由IoC容器来创建和管理。

在Spring 框架中,Bean的创建和管理是通过BeanFactory和ApplicationContext来实现的。

BeanFactory是Spring框架的基础设施,它提供了对Bean的创建、配置和管理的基本功能。

而ApplicationContext是BeanFactory的子接口,它提供了更多的高级特性,如国际化、事件传播、Bean的自动装配等。

在Spring框架中,开发人员可以通过配置文件或注解来描述Bean之间的依赖关系,从而实现对象之间的解耦和重用。

spring流程

spring流程

spring流程Spring流程。

Spring框架是一个轻量级的、非侵入式的Java企业应用开发框架,它的核心是IoC(控制反转)和AOP(面向切面编程),提供了一种简单的方式来开发企业级应用程序。

在Spring框架中,流程是非常重要的,它决定了应用程序的运行顺序和数据流向。

本文将详细介绍Spring框架中的流程,包括Bean的生命周期、Spring的初始化和销毁过程、以及Spring中常用的流程控制方式。

首先,我们来看一下Spring中Bean的生命周期。

在Spring框架中,Bean的生命周期包括初始化和销毁两个阶段。

在初始化阶段,Spring容器会根据配置文件或注解来创建Bean实例,并进行依赖注入和属性设置。

然后,Spring容器会调用Bean的初始化方法,进行一些额外的初始化工作。

在销毁阶段,Spring容器会调用Bean的销毁方法,进行一些清理工作,释放资源。

整个Bean的生命周期由Spring容器来管理,开发者只需要关注Bean的业务逻辑即可。

其次,我们来了解一下Spring的初始化和销毁过程。

在Spring框架中,初始化和销毁过程是由Spring容器来管理的。

当Spring容器启动时,它会读取配置文件或扫描注解,创建Bean实例,并进行初始化工作。

在初始化过程中,Spring容器会调用Bean的初始化方法,进行一些额外的初始化工作,比如连接数据库、加载配置文件等。

当Spring容器关闭时,它会调用Bean的销毁方法,进行一些清理工作,释放资源。

整个初始化和销毁过程由Spring容器来管理,开发者只需要关注Bean的业务逻辑即可。

最后,我们来介绍一下Spring中常用的流程控制方式。

在Spring框架中,流程控制是非常重要的,它决定了应用程序的运行顺序和数据流向。

Spring提供了多种流程控制方式,比如条件判断、循环、并发控制等。

开发者可以根据实际需求选择合适的流程控制方式,来实现复杂的业务逻辑。

Spring核心系列之Spring中的事务

Spring核心系列之Spring中的事务

Spring核⼼系列之Spring中的事务Spring核⼼系列之Spring中的事Spring核⼼系列之Spring中的事务Hello,⼤家好,前⾯两篇⽂章给⼤家分享了Spring AOP,今天就趁热打铁,给⼤家分享⼀下,Spring中的事务,事务这个事,其实在国内⼀些⼩公司,⼀般都会忽略的,尤其是很多⽹站,设计不到钱的系统,不会在乎这个东西,事务不回滚造成的结果⽆⾮就是脏数据,脏改等后果。

因为作者以前待过的⼀个房产⽹站,根本就不在乎这个事务,有问题就有问题了,反正⽤户也没充钱在⽹站上。

呵呵。

今天还是和⼤家分享⼀下这个Spring的事务,因为这个东西算是Spring 内部使⽤AOP最好的⼀个体现,体现了AOP思想,OK,⽂章结构:Spring boot 中的事务Spring事务中的事务属性1. Spring boot 中的事务看到Spring boot,很多⼈肯定感觉是被忽悠了,为什么说讲Spring事务,这⼜来Spring boot搞事情。

⽤过Spring boot的⼩伙伴其实都知道,这两个没什么⼤的区别,笔者这⾥使⽤Spring boot来演⽰,完全是为什么了简便。

因为搭⼀个Spring传统的ssm三件套⼯程可能要花费5分钟,⽽搭建⼀个Spring boot的"ssm"⼯程,就是⿏标点⼀点的事。

⽽且开启事务也是⼀个注解的事。

所以,⽼铁们,对不住了,这⼀篇⽤Spring boot和⼤家演⽰Spring的事务,这⾥我给⼀个传送门,是传统项⽬的事务,⼤家可以参考下:传统Spring⼯程的Spring事务废话不多说,直接上Spring boot代码:.@EnableTransactionManagement 表⽰开启事务!.这是⼀个Service,内部的personMapper是⼀个dao接⼝,持久化⽤的mybatis.演⽰的效果应该是:当调⽤PersonService的testTx()时,由于开启了事务,所以update2报异常时,应该会回滚。

spring工作流程

spring工作流程

spring工作流程Spring工作流程。

Spring是一个开源的轻量级Java开发框架,它提供了一种全面的编程和配置模型,用于构建现代化的基于Java的企业应用程序。

Spring框架的核心是IoC(控制反转)和AOP(面向切面编程),它还包括许多其他功能,如事务管理、数据访问、Web开发等。

在本文中,我们将重点介绍Spring框架的工作流程,以帮助读者更好地理解Spring框架的运行机制。

1. 初始化Spring容器。

Spring框架的工作流程始于初始化Spring容器。

Spring容器是Spring框架的核心部分,它负责管理应用程序中的对象(bean)以及它们之间的依赖关系。

Spring容器有两种类型,BeanFactory和ApplicationContext。

BeanFactory是Spring框架的基础设施,它提供了基本的依赖注入功能。

ApplicationContext构建在BeanFactory之上,提供了更多的企业级功能,如国际化、事件传播、资源加载等。

2. 加载配置文件。

在初始化Spring容器之前,我们需要先创建一个配置文件,用来描述应用程序中的对象及其依赖关系。

Spring框架支持多种配置方式,包括XML配置、注解配置和Java配置。

XML配置是Spring 框架最传统的配置方式,它通过一个XML文件描述应用程序中的对象及其依赖关系。

注解配置是一种基于注解的配置方式,它通过在Java类上添加注解来描述对象及其依赖关系。

Java配置是一种基于Java的配置方式,它通过Java代码来描述对象及其依赖关系。

3. 实例化对象。

一旦Spring容器被初始化并且配置文件被加载,Spring框架就会根据配置文件中的描述来实例化对象。

Spring框架中的对象通常被称为bean,它们由Spring容器负责管理和创建。

在实例化对象的过程中,Spring框架会根据配置文件中的描述来创建对象,并且解决对象之间的依赖关系。

spring事务详解(基于注解和声明的两种实现方式)

spring事务详解(基于注解和声明的两种实现方式)

spring事务详解(基于注解和声明的两种实现⽅式)Spring事务( Transaction )事务的概念事务是⼀些sql语句的集合,作为⼀个整体执⾏,⼀起成功或者⼀起失败。

使⽤事务的时机⼀个操作需要多天sql语句⼀起完成才能成功程序中事务在哪⾥说明加在业务类的⽅法上⾯(public⽅法上⾯),表⽰业务⽅法执⾏时,需要事务的⽀持。

不同的事务管理器不同的数据库访问技术,处理事务是不同的1. 使⽤jdbc访问数据库,事务处理public void updateAccount(){Connection con = .....;con.setAutoCommit(false);state.insert();state.update();mit();con.setAutoCommit(true);}2. MyBatis执⾏数据库,处理事务public void updateAccount(){SqlSession sqlSession = SqlSessionFactory.openSession(false);try{sqlSession.insert(...);sqlSession.update(...);mit();}catch(Exception e){sqlSession.rollback();}}spring统⼀管理事务,把不同的数据库访问技术的事务处理统⼀起来使⽤spring的事务管理器,管理不同数据库访问技术的事务处理。

开发⼈员只需要掌握spring的事务处理⼀个⽅案,就可以实现使⽤不同数据库访问技术的事务管理。

尽管事务⾯向的是spring,有spring管理事务,做事务提交和回滚。

spring事务管理器spring框架使⽤事务管理器对象,管理所有的事务。

事务管理器接⼝: PlatFormTransactionManager作⽤:定义了事务的操作,主要是commit() , rollback()事务管理器有很多的实现类:⼀种数据库访问计数有⼀个实现类。

Spring中的事务管理实例详解

Spring中的事务管理实例详解

Spring中的事务管理实例详解本文实例讲述了Spring中的事务管理。

分享给大家供大家参考。

具体分析如下:事务简介:事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性事务就是一系列的动作,它们被当作一个单独的工作单元。

这些动作要么全部完成,要么全部不起作用事务的四个关键属性(ACID)①原子性(atomicity):事务室一个原子操作,有一系列动作组成。

事务的原子性确保动作要么全部完成,要么完全不起作用②一致性(consistency):一旦所有事务动作完成,事务就被提交。

数据和资源就处于一种满足业务规则的一致性状态中③隔离性(isolation):可能有许多事务会同时处理相同的数据,因此每个事物都应该与其他事务隔离开来,防止数据损坏④持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。

通常情况下,事务的结果被写到持久化存储器中Spring中的事务管理作为企业级应用程序框架,Spring在不同的事务管理API之上定义了一个抽象层。

而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。

Spring既支持编程式事务管理,也支持声明式的事务管理编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码声明式事务管理:大多数情况下比编程式事务管理更好用。

它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。

事务管理作为一种横切关注点,可以通过AOP方法模块化。

Spring通过Spring AOP框架支持声明式事务管理。

Spring事务的传播属性:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。

事务的传播行为可以由传播属性指定。

Spring定义了7种传播行为:Spring支持的事务传播行为传播行为含义PROPAGATION_MANDATORY 表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常PROPAGATION_NESTED 表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

给你详细讲一下SSH框架的事物管理,希望对你有帮助。

Struts+hibernate+spring整合开发web应用是相当流行的,只需要简单的配置就能轻松的对数据库进行crud操作,下面就hibernate+spring 的配置做一下剖析,一边与大家一起分享经验:1、准备工作:可以利用hibernate tools生成相关映射文件已经po对象、dao对象,dao 也可以自己手动编写,无非就是实现crud,如果通过继承hibernate提供的HibernateDaoSupport,则可以更轻松的实现关键就在于配置文件,下面看一个样例:<xml version="" encoding="utf-8"><beans xmlns=" "xmlns:xsi=" "xsi:schemaLocation=" "><!--配置数据源--><bean id="dataSource" class="" destroy-method="close"><!-- 指定连接数据库的驱动 --><property name="driverClass" value=""/><!-- 指定连接数据库的URL --><property name="jdbcUrl" value="jdbc:"/><!-- 指定连接数据库的用户名 --><property name="user" value="root"/><!-- 指定连接数据库的密码 --><property name="password" value="root"/><!-- 指定连接数据库连接池的最大连接数 --><property name="maxPoolSize" value="20"/><!-- 指定连接数据库连接池的最小连接数 --><property name="minPoolSize" value="1"/><!-- 指定连接数据库连接池的初始化连接数 --><property name="initialPoolSize" value="1"/><!-- 指定连接数据库连接池的连接的最大空闲时间 --> <property name="maxIdleTime" value="20"/></bean><!--配置数据库会话工厂--><bean id="sessionFactory" class=""><property name="dataSource" ref="dataSource"/> <property name="mappingResources"><list><value>com/ouya/ </list></property><property name="hibernateProperties"><props><prop key=""> <prop key="">true</prop><prop key="">true</prop></props></property></bean><!--配置事务管理器--><bean id="transactionManager" class=""><property name="sessionFactory"><reflocal="sessionFactory"/></property></bean><!—-配置Spring 事务管理器代理 --><bean id="transactionProxyFactory" abstract="true" lazy-init="true" class=""><property name="transactionManager"><ref local="transactionManager"/></property><property name="transactionAttributes"><props><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop> <propkey="find*">PROPAGATION_REQUIRED,readOnly</prop><propkey="search*">PROPAGATION_REQUIRED,readOnly</prop><propkey="remove*">PROPAGATION_REQUIRED,readOnly</prop><propkey="query*">PROPAGATION_REQUIRED,readOnly</prop><propkey="list*">PROPAGATION_REQUIRED,readOnly</prop><propkey="count*">PROPAGATION_REQUIRED,readOnly</prop><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props></property></bean><!-- Hibernate模板 --><bean id="hibernateTemplate" class=""><property name="sessionFactory"><ref local="sessionFactory" /></property></bean><!--服务层对象--><bean id="us" class=""><property name="userDao"><ref local="userDao"/></property></bean><!-- spring代理用户服务对象 --><bean id="userService" parent="transactionProxyFactory"><!-- 如果上面的服务层对象实现了接口,则此处必须设置proxyTargetClass为true,否则会报classcast异常 --><!--<property name="proxyTargetClass" value="true"/>--><property name="target" ref="us"/></bean><!-- 用户数据访问对象DATA ACCESS OBJECT --><bean id="userDao" class=""><property name="hibernateTemplate" ref="hibernateTemplate"/> </bean></beans>可以看到配置文件的步骤:1、配置数据源2、配置会话工厂(依赖注入上面的数据源,还要注入hbm映射文件[注意正确的位置]、hibernate属性文件)3、配置事务管理器(依赖注入上面的会话工厂)4、 Spring中声明事务管理器(根据需要又可分为几种,但都要依赖注入上面的事务管理器,此外还需要配置transationAttributes)后面的一些普通的bean配置就不用说了上面的例子中使用的声明事务管理器是:TransactionProxyFactoryBean,这样的话我们就需要在后面配置目标bean,比如上面的例子中我们的原服务对象是id为us的UserService(没有实现接口),所以我们为他配置了id为userService的代理对象(目标bean),程序中使用时只能通过使用代理对象才能实现数据库操作功能(代理对象的父类是上面声明的事务管理器,一边我们使用的时候开启事务),如果直接使用服务对象就无法开启事务程序中调用:UserService us = (UserService) ("userService");注:userService就是上面配置的代理对象的id,而不是原服务对象的id但是如果我们想通过原服务对象的id来使用对象,则我们需要使用代理事务管理器BeanNameAutoProxyCreator(根据beanname自动代理),上面的配置文件需要做改动,做两件事(当然先要删除原来配置的TransactionProxyFactoryBean,不然就混乱了,可能会报错的):1、增加一个事务拦截器<bean id="transactionInterceptor" class=""><property name="transactionManager"><ref local="transactionManager"/></property><property name="transactionAttributes"><props><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="del*">PROPAGATION_REQUIRED</prop><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><propkey="find*">PROPAGATION_REQUIRED,readOnly</prop><propkey="search*">PROPAGATION_REQUIRED,readOnly</prop><propkey="remove*">PROPAGATION_REQUIRED,readOnly</prop><propkey="query*">PROPAGATION_REQUIRED,readOnly</prop><propkey="list*">PROPAGATION_REQUIRED,readOnly</prop><propkey="count*">PROPAGATION_REQUIRED,readOnly</prop><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props></property></bean>2、定义自动代理事务管理器<!-- 定义BeanNameAutoProxyCreator--><bean class=""><!-- 如果服务层对象是接口实现类,则需要设置proxyTargetClass属性为true --><!--<property name="proxyTargetClass" value="true"--><!-- 指定对满足哪些bean name的bean自动生成业务代理 --> <property name="beanNames"><!-- 下面是所有需要自动创建事务代理的bean--><list><value>us</value></list><!-- 此处可增加其他需要自动创建事务代理的bean--></property><!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--><property name="interceptorNames"><list><!-- 此处可增加其他新的Interceptor --><value>transactionInterceptor</value></list></property></bean>然后我们在程序中调用时应如下:UserService us = (UserService) ("us");注:注意与上面使用TransactionProxyFactoryBean时的调用区别,此处我们用getbean时直接取原服务层对象的id,不需要去配置目标bea,这也正是BeanNameAutoProxyCreator(根据bean名称自动代理)的含义所在附录:1、关于hibernate的属性详解:<bean id="dataSource" class="" destroy-method="close"><!-- 以下配置都是使用属性文件中的配置,而之所以可以这样写,就是因为有属性占位符配置的原因 --><property name="driverClass" value="${}"/><property name="jdbcUrl" value="${}"/><property name="user" value="${}"/><property name="password" value="${}"/><!-- 连接池维持的最小的连接个数 --><property name="minPoolSize" value="5"/><!-- 连接池维持的最大的连接个数 --><property name="maxPoolSize" value="20"/><!-- 最大空闲时间, 当某个连接在这个时间内没活动后将从池中移除,前提是池中至少多于最少的连接数: minPoolSize --><property name="maxIdleTime" value="1800"/><!-- 为加强准备语句的执行性能,此参数指定被缓存的PreparedStatement 的个数 --><property name="maxStatements" value="50"/></bean>Hibernate 会话厂 SessionFactorySession 就是用于每次与数据库会话的,因此需要:数据库的配置参数,这些参数就是上面的数据源指定的! 因此我们只需引用即可: ref="dataSource";实体映射配置配置结果缓存配置(这里使用的是开源的 ehcache)<!-- Hibernate SessionFactory --><bean id="sessionFactory" class=""><!-- 引用前面定义的数据源 --><property name="dataSource" ref="dataSource"/><!-- 所有实体映射文件列表, 所有的文件 --><property name="mappingResources"><list><value>org/springframework/samples/jpetstore/domain/ 传统上的文件的参数放在这里 --><property name="hibernateProperties"><props><!-- 指定数据库方言 --><prop key="">${}</prop><!-- 是否在日志中输出所有Hibernate与数据库交互的SQL语句 --> <prop key="">true</prop><!-- 是否在日志中输出的SQL 语句格式化成易读形式 --><prop key="">true</prop><!-- 是否显示统计形式,一般在测试阶段使用 --><prop key="">true</prop><!-- 对于级联查询,一次性获取的级联深度, @todo 需进一步研究 --> <prop key="">2</prop><!--Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。

相关文档
最新文档