




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习 创造 超越 共享1学习 创造 超越 共享Spring事务管理 柳勇光学习 创造 超越 共享2事务基本概念编程式事务声明式事务P8事务应用QASpring事务管理大纲学习 创造 超越 共享3事务基本概念1.事务必须具备的4个特征a.原子性(Atomicity).要么成功提交,要么回滚b.一致性(Consistency).必须保证资源状态的一致性c.隔离级别(Isolation).在事务执行过程中,其操作资源的状态信息不能够被其他并发事务操作到d.持久性(Durablity).一旦事务提交,其结果应该是持久的2.事务类型及其区别a.局部事务(本地,Local)b.全局事务(全局,Global
2、)学习 创造 超越 共享4c.局部事务与全局事务区别:操作的资源不同。本地事务全局事务事务基本概念学习 创造 超越 共享51、问题非基于Spring事务处理问题Session session = null;Transaction transaction = null;try session = factory.openSession(); /开启事务 transaction = session.beginTransaction(); transation.begin(); session.save(user); mit();/提交事务 catch (Exception e) e.printSt
3、ackTrace(); transaction.rollback();/回滚事务 return false;finally session.close();Connection conn = DataSourceUtils.getConnection(); /开启事务conn.setAutoCommit(false);trytry Object retVal = callback.doInConnection(conn); mit(); /提交事务 returnreturn retVal;catchcatch (Exception e) conn.rollback();/回滚事务 throwt
4、hrow e;finallyfinally conn.close();缺点:不一致的事务管理,编程复杂学习 创造 超越 共享6nSpring框架提供了一致的事务管理抽象,这带来了以下好处:1. 为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO2. 支持声明式事务管理3. 提供比复杂的事务API(诸如JTA)更简单的、更易于使用的编程式事务管理API4. 非常好地整合Spring的各种数据访问抽象Spring事务处理Spring事务抽象的关键是事务策略的概念。这个概念由org.springframework.transaction.PlatformT
5、ransactionManager接口定义学习 创造 超越 共享7 Spring没有直接管理事务,而是将管理事务的责任委托给某个特定平台的事务实现。事务管理器实现事务管理器实现目标目标org.springframework.jdbc.datasorg.springframework.jdbc.datasource.DataSourceTransactionMource.DataSourceTransactionManageranager在单一的在单一的JDBC DatasourceJDBC Datasource中的管理中的管理事务事务org.springframework.orm.hibern
6、org.springframework.orm.hibernate.HibernateTransactionManagate.HibernateTransactionManagerer当持久化机制是当持久化机制是hibernatehibernate时,用它来时,用它来管理事务管理事务org.springframework.jdo.JdoTraorg.springframework.jdo.JdoTransactionManagernsactionManager当持久化机制是当持久化机制是JdoJdo时,用它来管理事时,用它来管理事务。务。org.springframework.transact
7、.springframework.transaction.jta.JtaTransactionManagerjta.JtaTransactionManager使用一个使用一个JTAJTA实现来管理事务。在一个实现来管理事务。在一个事务跨越多个数据源时使用事务跨越多个数据源时使用org.springframework.orm.ojb.Peorg.springframework.orm.ojb.PersistenceBrokerTransactionManrsistenceBrokerTransactionManagerager当当apacheapache的的ojbojb用作持久化机
8、制时,用用作持久化机制时,用它来管理事务。它来管理事务。Spring的事务管理器的事务管理器学习 创造 超越 共享8SpringSpring的事务管理器的事务管理器platformTransactionmanagerplatformTransactionmanagerdatasourcedatasourceTransactionTransactionmanagermanagerhibernatehibernateTransactionTransactionmanagermanagerjdojdoTransactionTransactionmanagermanagerpersistenceper
9、sistenceBrokerBrokerTransactionTransactionmanagermanagerJTAJTATransactionTransactionmanagermanagerjdbcjdbchibernatehibernateJDOJDOOJBOJBJTAJTA每种事务管理器都充当了对特定平台的事务实现的代理。这样我们就只需要和spring中的事务打交道,而不用关系实际上事务实现是什么样的。要使用一个事务管理器,你得再上下文中声明它。程序控制事务管理能让你在代码中精确定义事务边界,声明式事务帮助把一个操作从事务规则中分离出来。学习 创造 超越 共享92022-3-6事务的
10、传播方式(1)PROPAGATION_REQUIREDPROPAGATION_REQUIRED 表示业务逻辑方法需要在一个事务中运行,如果该方法在运行时,已经处在一个事务中,则直接加入到该事务中,否则自己创建一个新的事务。即:如果存在一个事务,则支持当前事务。如果没有事务则开启。PROPAGATION_SUPPORTSPROPAGATION_SUPPORTS 表示业务逻辑方法如果在某个事务范围内被调用,则该方法直接成为当前事务的一部分。如果该方法在事务范围外被调用,则该方法在无事务的环境下执行。即:如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。学习 创造 超越 共享102022
11、-3-6PROPAGATION_MANDATORYPROPAGATION_MANDATORY 表示业务逻辑方法只能在一个已经存在的事务中执行,该方法不能创建自己的事务,如果该方法在没有事务的环境下被调用,容器就会抛出事务不存在的异常。 即:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。PROPAGATION_REQUIRES_NEWPROPAGATION_REQUIRES_NEW 表示不管当前是否有事务存在,该业务逻辑方法都会为自己创建一个全新的事务。如果该方法已经运行在一个事务中,则原有事务会被挂起,新的事务会被创建,直到该方法执行结束后新事务才算结束,原先的事务再
12、恢复执行。即: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起,新事务运行完毕后,再接着运行被挂起的事务。事务的传播方式(2)(2)学习 创造 超越 共享112022-3-6PROPAGATION_NOT_SUPPORTEDPROPAGATION_NOT_SUPPORTED 表示业务逻辑方法不需要事务。如果该方法目前没有关联到某个事务,容器不会为它创建事务。如果该方法在一个事务中被调用,则该事务会被挂起,在方法调用结束后原先的事务才会恢复执行。即:总是非事务地执行,并挂起任何存在的事务,当前方法运行完毕后,被挂起的事务才恢复执行。事务的传播方式(3)(3)学习 创造 超越
13、共享122022-3-6 PROPAGATION_NEVERPROPAGATION_NEVER 表示业务逻辑方法绝对不能在事务范围内执行。如果该方法在某个事务中执行,容器会抛出异常,只有没有关联到任何事务时该方法才能正常执行。即:总是非事务地执行,如果存在一个活动事务,则抛出异常。事务的传播方式(4)(4)学习 创造 超越 共享132022-3-6 PROPAGATION_NESTEDPROPAGATION_NESTED 表示如果一个活动的事务存在,业务逻辑方法则运行在一个嵌套的事务中,如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点,内
14、部事务的回滚不会对外部事务造成影响,它只对DataSourceTransactionManager事务管理器生效。即:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。事务的传播方式(5)(5)学习 创造 超越 共享14事务的传播方式事务的传播方式传播行为意义PROPAGATION_REQUIRED表示当前方法必须运行在一个事务中。若一个现有的事务正在进行中,该方法将会运行在这个事务中。否则的话,就要开一个新的事务。PROPAGATION_REQUIRES_NEW表示当前方法必
15、须运行在它自己的事务里。他将启动一个新的事务。如果一个现有事务在运行的话,将在这个方法运行期间被挂起。PROPAGATION_SUPPORTS当前方法不需要事务处理环境,但如果有一个事务已经在运行的话,这个方法也可以在这个事务里运行。传播规则回答了一个问题,就是新的事务是否要被启动或是挂起,或者方法是否要在事务环境中运行。学习 创造 超越 共享15传播行为意义PROPAGATION_MANDATORY该方法必须运行在一个事务中。如果当前事务不存在,将抛出一个异常。PROPAGATION_NESTED若当前已经存在一个事务,则该方法应当运行在一个嵌套的事务中。被嵌套的事务可以从当前事务中单独的提
16、交或回滚。若当前事务不存在,则看起来就和PROPAGATION_REQUIRED没有两样。PROPAGATION_NEVER当前的方法不应该运行在一个事务上下文中。如果当前存在一个事务,则会抛出一个异常。PROPAGATION_NOT_SUPPORTED表示该方法不应在事务中运行。如果一个现有的事务正在运行,他将在该方法的运行期间被挂起。如果使用jta的事务管理器,需要访问jtatansactionmanager.事务的传播方式事务的传播方式学习 创造 超越 共享162022-3-6事务播放方式图示说明事务播放属性事务播放属性t1t1( (相当于相当于UserManagerImplUserMa
17、nagerImpl) ) t2 t2( (相当于相当于LogImpl)LogImpl)REQUIREDREQUIRED 无无 t1t1 t2(t2 t2(t2自已会开一个自已会开一个) ) t1( t1(如果如果t1t1开启了事务,则开启了事务,则t2t2直接使用直接使用t1t1开启的事务开启的事务) )REQUIRES_NEWREQUIRES_NEW 无无 t1t1 t2 t2 t2(t2 t2(t2会自已单独开启一个会自已单独开启一个新事务,不会使用新事务,不会使用t1t1的事务的事务) )SupportSupport 无无 t1t1 无无 t1(t1(如果有事务,则直接使如果有事务,则直
18、接使用,没有就不用事务用,没有就不用事务) )MANDATORYMANDATORY 无无 t1t1 抛异常(如果没事务就抛异抛异常(如果没事务就抛异常)常) t1(t1(如果有事务,则直接使如果有事务,则直接使用用) )NOT_SUPPORTEDNOT_SUPPORTED 无无 t1t1 无无 无(如果无(如果t1t1有事务,则有事务,则t2t2也也不用事务,不支持事务)不用事务,不支持事务)NEVERNEVER 无无 t1t1 无无 抛异常抛异常学习 创造 超越 共享17 隔离级别几个概念 脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 不可重
19、复读:一个事务执行相同的查询两次或两次以上,但每次查询结果都不同。 幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。事务隔离级别(1 1)学习 创造 超越 共享18 隔离级别隔离级别含义ISOlATION_DEFAULT使用后端数据库默认的隔离级别ISOLATION_READ_UNCOMMITED允许你读取还未提交后数据。可能导致脏、幻、不可重复ISOLATION_READ_COMMITTED允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生。ISOLATION_REPEATABLE_READ对相同
20、字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,幻读仍可能发生。ISOLATION_SERIALABLE完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。事务隔离级别(2 2)学习 创造 超越 共享192022-3-6Spring中事务隔离级别(1) ISOLATION_DEFAULT ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.以下四个与JDBC的隔离级别相对应 ISOLATION_R
21、EAD_UNCOMMITTEDISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读、不可重复读和幻像读。 ISOLATION_READ_COMMITTEDISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。学习 创造 超越 共享202022-3-6 ISOLATION_REPEATABLE_READISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
22、它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生,即:不可重复读。 ISOLATION_SERIALIZABLEISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读、不可重复读外,还避免了幻像读。但是并发性最差。Spring中事务隔离级别(2)学习 创造 超越 共享21 只读 若对数据库只进行读操作,可设置事务只读的属性,使用某些优化措施。数据库会进行优化处理。若使用hibernate作为持久化机制,声明一个只读事务会使hibernate的flush模式设置为FLUSH_NEVER。避免不必要的
23、数据同步,将所有更新延迟到事务的结束。事务只读属性学习 创造 超越 共享22 事务超时 若事务在长时间的运行,会不必要的占用数据库资源。设置超时后,会在指定的时间片回滚。将那些具有可能启动新事务的传播行为的方法的事务设置超时才有意义(PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED)。事务超时学习 创造 超越 共享232022-3-6Spring事务管理的两种方式 在Spring中实现事务管理有两种方式, 一种是传统的编程式事务管理编程式事务管理,也就是程序员在编写程序代码实现事务的管理,具体包括定义事务的开始、在
24、程序异常时进行事务的回滚及程序正常执行后的事务提交。 另一种则是基于AOP技术实现的声明式事务管理声明式事务管理,事务管理本身是一项共有的系统级服务功能,完全可以将事务管理抽象成一个事务切面,程序员不再关心事务管理的问题,把主要精力放在核心业务逻辑代码的编写上,然后在需要进行事务管理的方法上切入事务切面,使之具有事务管理的功能,达到事务管理的目的。学习 创造 超越 共享24事务基本概念编程式事务声明式事务P8事务应用QASpring事务管理大纲学习 创造 超越 共享25Spring编程式事务管理 Spring事务处理核心类: TransactionDefinition :事务属性定义 ,描述了
25、事务的隔离级别, 超时时间,事务是否只读, 传播规则等等; TranscationStatus :描述事务的状态,代表了当前的事务,可以提交,回滚 PlatformTransactionManager: 事务管理器接口, 只定义了3个方法:getTransaction()获取事务的状态; commit();rollback(); 事务管理器的实现类有多种,根据具体的持久层框架的不同而不同; 事务管理器实现类: DataSourceTransactionManager、HiberNateTransactionManager、 JdoTransactionManager等学习 创造 超越 共享26
26、public interface PlatformTransactionManager TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException;PlatformTransactionManage
27、r接口学习 创造 超越 共享27TransactionDefinition接口1:事务隔离:当前事务和其它事务的隔离的程度。例如,这个事务能否看到其他事务未提交的写数据?2:事务传播:通常在一个事务中执行的所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在,有几个选项可以指定一个事务性方法的执行行为:例如,简单地在现有的事务中继续运行(大多数情况);或者挂起现有事务,创建一个新的事务。Spring提供EJB CMT中常见的事务传播选项。3:事务超时: 事务在超时前能运行多久(自动被底层的事务基础设施回滚)。4:只读状态: 只读事务不修改任何数据。只读事务在某些情况下(例如当使用Hi
28、bernate时),是一种非常有用的优化。TransactionDefinition & TransactionStatus TransactionStatus 对象可能代表一个新的或已经存在的事务(如果在当前调用堆栈有一个符合条件的事务。如同J2EE事务环境,一个 TransactionStatus 也是和执行 线程绑定的)学习 创造 超越 共享28直接使用PlatformTransactionManager直接使用PlatformTransactionManager管理事务可以使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用给你的be
29、an传递一个你使用的 PlatformTransaction对象。然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。一般流程如下:1 .声明数据源2 .声明一个事务管理类,例如DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等3 .在我们的代码中加入事务处理代码:/默认的事务属性是PROPAGATION_REQUIRED属性/初始化事务,参数定义事务的传播类型 TransactionDefinition td = new
30、 TransactionDefinition();/获得事务状态TransactionStatus ts = transactionManager.getTransaction(td);try /do sth transactionMmit(ts);catch(Exception e)transactionManager.rollback(ts);学习 创造 超越 共享29 /3.获取事务管理器 PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean(txManager); /4.定义事务属
31、性 DefaultTransactionDefinition td = newnew DefaultTransactionDefinition(); td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); /5开启事务,得到事务状态 TransactionStatus status = txManager.getTransaction(td); trytry /6.执行数据库操作 System.out.println(jdbcTempate.queryForInt(select count(*) from tb
32、l_doc); /7、提交事务 txMmit(status); catchcatch (Exception e) /7、回滚事务 txManager.rollback(status); 直接使用PlatformTransactionManager学习 创造 超越 共享30使用TransactionTemplate管理事务TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。代码片段: Tr
33、ansactionTemplate tt = new TransactionTemplate();Object result = tt.execute(new TransactionCallback(). public Object doTransaction(TransactionStatus status). /do sth return null; );使用TransactionCallback()可以返回一个值。如果使用TransactionCallbackWithoutResult则没有返回值。TransactionCallbackWithoutResult 执行事务没有返回值,例如
34、save、update、delete等等;TransactionCallback 执行事务处理后有返回值,如find要返回结果集(List);使用TransactionTemplate管理事务学习 创造 超越 共享31/3.获取事务管理器PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean(txManager); /4、定义事务管理的模板TransactionTemplate transactionTemplate = newnew TransactionTemplate(txManage
35、r);/5.定义事务属性transactionTemplate. setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);/6.回调,执行真正的数据库操作,如果需要返回值需要在回调里返回transactionTemplate.execute(newnew TransactionCallback() Override publicpublic Object doInTransaction(TransactionStatus status) /7.执行数据库操作 System.out.println(jdbcTempate
36、.queryForInt(select count(*) from tbl_doc); returnreturn nullnull; );使用TransactionTemplate管理事务学习 创造 超越 共享322022-3-6编程式事务示例 下面以Hibernate为例,来考查一下在实际开发中如何使用编程式事务来开发项目。示例:1、建立两个实体:User和Log(用户和日志)2、要求:在保存用户时自动保存一份日志分析:完成上述功能,就涉及到对两张表的保存,要么全成功,要么全失败,为了能够达到这样的要求,因此必须采用事务来进行控制。学习 创造 超越 共享332022-3-6 使用编程式事务,
37、在Hibernate中获取Session的方法需要使用如下方式才能保证对于同一个线程不同的表的操作才能在一个事务下控制: 在hibernate.cfg.xml文件中加入: thread说明:表示使用的是本地事务(jdbc事务)学习 创造 超越 共享342022-3-6 获取Session的方法的改进 获取Session时必须采用:getCurrentSession()说明:获取的Session就会绑定到当前线程中,这样再保存其它实体对象的时候就保证了也在同一事务下操作(因为是在同一个线程中),同时当提交事务或回滚事务后,Session会自动关闭,不用人为再进行关闭。学习 创造 超越 共享352
38、022-3-6示例代码:UserManagerImpl类代码:public void addUser(User user) Session session = null;try /session = HibernateUtils.getSession(); session = HibernateUtils.getSessionFactory().getCurrentSession(); session.beginTransaction(); session.save(user); /保存日志 Log log = new Log(); log.setType(安全日志); log.setDeta
39、il(xxx进入系统); log.setDate(new Date(); LogManagerImpl logManager = new LogManagerImpl(); logManager.addLog(log); session.getTransaction().commit(); catch(Exception e) e.printStackTrace();session.getTransaction().rollback(); 学习 创造 超越 共享362022-3-6LogManagerImplpublic void addLog(Log log) HibernateUtils.
40、getSessionFactory().getCurrentSession().save(log);学习 创造 超越 共享372022-3-6说明: thread 当设置完该属性后,Hibernate会将获取到的Session绑定到当前线程中,这样再调用getCurrentSession()方法获取Session时,该方法首先查看当前线程中有没有Session对象,如果没有,则从SessionFactory中获取Session对象并把该Session对象绑定到当前线程中,如果当前线程中有Session对象,该方法则直接从当前线程中取出Session对象直接使用,这样就保证了在同一个线程请求中,
41、不管操作多少个实体对象使用的都是同一个Session对象,只要Session对象打开了事务,那么这些不同的实体对象的操作都 处于同一个事务控制之下(因为这些实体对象使用的是同一个Session)。学习 创造 超越 共享382022-3-6编程式事务小结编程式能灵活控制事务边界,但编程复杂需要在hibernate.cfg.xml文件中加入如下配置:如果使用的是本地事务(jdbc事务) threadthread如果使用的是全局事务(jta事务) jtajta获取Session时需要使用getCurrentSession()采用getCurrentSession()创建的session会绑定到当前线
42、程中,而采用openSession()创建的session则不会。采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()创建的session必须手动关闭学习 创造 超越 共享39事务基本概念编程式事务声明式事务P8事务应用QASpring事务管理大纲学习 创造 超越 共享402022-3-6声明式事务 Spring为声明式事务提供了简单而强大的支持,所谓声明式事务,是指在Spring的配置文件中使用相应的标签对事务进行配置,这样做的好处是Spring可以帮助我们管理事务,例如:什么时候提交事务、什么时候回滚事
43、务等。 从开发效率与易维护的角度来看,Spring声明式事务管理是实际开发中比较常用的。学习 创造 超越 共享4141 AOP(Aspect Oriented Programming)它是一种设计模式,用于实现一个系统中的某一个方面的应用。 AOP的应用 系统安全 事务 日志 审计AOPAOP简介学习 创造 超越 共享4242 AOP的术语描述了AOP编程的各个方面: 切面(Aspect)描述的是一个应用系统的某一个方面或领域,例如:日志,事务,权限检查等。 连接点(Joinpoint)连接点是应用程序执行过程中插入切面的点,这些点可能是方法的调用,异常抛出或字段的修改等。 通知(Advise
44、)通知它是切面的具体实现,它表示切面的行为,例如在日志的切面应用中,日志通知包含了实现日志功能的具体代码,例如向日志文件写入日志信息等。AOPAOP术语学习 创造 超越 共享4343 切入点(Pointcut)切入点指定了通知应当应用在那些连接点上,通知可以应用到AOP框架支持的任何的连接点,例如:根据方法名来确定切入点等,它指定了那些连接点需要被通知。 引入(Introduction)引入充许你为已存在的类添加新的方法和属性。 目标对象(Target):目标对象是指被通知的对象,它是一个普通的业务对象,如果没有AOP那么它其中可能包含大量的非核心业务逻辑代码,例如日志,事务等,而如果使用了A
45、OP则其中只有核心的业务逻辑代码。AOPAOP术语学习 创造 超越 共享4444 代理(Proxy)代理是指将通知应用到目标对象后形成的新的对象。它实现了与目标对象一样的功能,不同的是它添加了通知的应用功能例如日志,事务等,对用户而言它与目标对象是一样的。 织入(Weaving)织入是指将切面应用到目标对象从而建立一个新的代理对象的过程,切面在指定的接入点被织入目标对象中,织入一般可发生在对象的编译期,类装载期或运行期,Spring的AOP采用的是运行期织入。AOPAOP术语学习 创造 超越 共享4545Spring AOP Spring的连接点模型是建立在方法拦截的基础之上。 Spring在
46、方法调用的各个地方可织入通知,Spring有提供多种类型的通知,它们分别提供了不同的织入方式通知类型接口描述around MethodInterceptor拦截目标方法的调用beforeBeforeAdvice调用目标方法前通知afterAfterReturningAdvice调用目标方法后通知throwsThrowsAdvice方法抛出异常时通知学习 创造 超越 共享4646Spring Aop的实现 Spring中建立AOP应用的基本步骤 建立目标类及业务接口 Spring中注册目标类实例 建立通知类实现具体的通知接口 Spring中注册通知类实例 配置目标类的代理对象(织入通知形成代理对
47、象) 获取代理对象,调用其中的业务方法学习 创造 超越 共享47声明式事务的实施步骤1、定义(资源)DataSource/SessionFactory2、定义事务管理器(管理资源的事务)3、定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性4、定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象(一定是业务逻辑层)5、Spring织入事务通知到目标对象(AOP代理)声明式事务的实施步骤学习 创造 超越 共享48实施事务的步骤1、定义DataSource2、定义事务管理器3、定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性4、定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象(一定是业务逻辑层)5、Spring织入事务通知到目标对象(AOP代理)声明式事务学习 创造 超越 共享49声明式事务学习 创造 超越 共享50Spring事务管理器声明式事务学习 创造 超越 共享51事务advice tx:method name=get / tx:method name= / 声明式事务- -事务a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时间管理在工作中的重要性计划
- 物流行业提升效率策略计划
- 2024年陕西省自然资源厅下属事业单位真题
- 2024年江门市江海区保安服务有限公司招聘真题
- 2024年贵州省司法厅下属事业单位真题
- 学期初工作计划与目标设定
- VB的代码复用策略与案例题及答案
- 软件开发中的业务理解试题及答案
- 系统学习的计算机VB试题及答案
- 算法与数据结构研究进展试题及答案
- 医院培训课件:《麻精药品规范化管理和使用》
- 数列-2020-2024年高考数学试题分类汇编(原卷版)
- 国开电大《商务英语4》单元自测1-8参考答案
- 成人脑室外引流护理-中华护理学会团体 标准
- 2024年经济师考试旅游经济(中级)专业知识和实务试卷及解答参考
- 《管道用消气过滤器》
- 初级应急救援员理论考试复习题及答案
- 医院培训课件:《外科手术部位感染的预防与处理措施》
- DB11∕T 243-2014 户外广告设施技术规范
- 广西专升本(高等数学)模拟试卷3(共212题)
- 六年级数学下册期末试卷及答案【可打印】
评论
0/150
提交评论