您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > spring使用基于注解的AOP事务管理
spring使用基于注解的AOP事务管理16.6AOP事务管理AOP事务管理利用了SpringAOP的基础设施,在大多数情况下,SpringAOP会创建一个JDK代理以拦截方法调用。你可以使用装载时编织以在装载期编织切面,这样就不需要代理了(如果你记不清什么是装载时编织,请参看第6章)。你有两种方式来配置SpringAOP事务管理,基于注解的配置以及XML配置。16.6.1使用基于注解的AOP事务管理你可以借助于AOP的自动代理,通过注解将事务性行为引入到现有的bean中。让我们以代码清单16-21开始吧,它展示了类DeclarativeTxBankService。代码清单16-21DeclarativeTxBankService实现请注意@Transactional属性,为了让Spring的事务管理基础设施可以利用该属性创建恰当的切入点和通知,我们需要使用AOP的自动代理和注解驱动的事务支持。代码清单16-22展示了与该注解相对应的XML配置。代码清单16-22基于注解的事务管理的配置文件该XML配置文件展示了标准的bankServicebean声明,紧跟其后的是tx:annotation-driven/和aop:aspectj-autoproxy/标签。tx:annotation-driven/标签使用@Transactional注解创建恰当的事务管理切面。接下来由aop:aspectj-autoproxy/通知匹配的bean。1.探索tx:annotation-driven标签tx:annotation-driven/标签是注解驱动的事务管理支持的核心。表16-3列出了tx:annotation-driven/标签的所有属性。表16-3tx:annotation-driven/标签的属性属性说明transactionManager指定到现有的PlatformTransactionManagerbean的引用,通知会使用该引用mode指定Spring事务管理框架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示SpringAOP会使用AspectJ创建代理order指定创建的切面的顺序。只要目标对象有多个通知就可以使用该属性proxy-target-class该属性如果为true就表示你想要代理目标类而不是bean所实现的所有接口2.探索@Transactional注解凭借@Transactional注解我们就可以控制通知将要创建的事务定义的方方面面。就像使用transactionAttributes属性表达式一样,你可以指定传播、隔离级别、超时以及允许和不允许的异常。表16-4列出了@Transactional注解的所有属性。表16-4@Transactional注解的属性属性类型说明propagationorg.springframework.annotaion.transaction.Propagation指定事务定义中使用的传播isolationorg.springframework.annotation.transaction.Isolation设定事务的隔离级别timeoutint指定事务的超时(单位为秒)readOnlyboolean如果为true,事务就被标识为只读noRollbackForClass?extendsThrowable[]目标方法可抛出的异常所构成的数组,但通知仍会提交事务rollbackForClass?extendsThrowable[]异常所构成的数组,如果目标方法抛出了这些异常,通知就会回滚事务3.基于注解的事务管理小结通过@Transactional注解,我们可以轻松地为一个方法声明事务。其好处在于你可以很直观地看到哪些方法带有事务,因为方法上面有该注解修饰。其缺点是你不得不为每个需要事务的方法都加上@Transactional注解。如果你使用的是默认的事务属性,这就不算什么问题,但当你需要设置其他的事务属性时,这就变得很乏味了,因为你要不停的复制、粘贴。另一种方式就是用@Transactional注解去修饰类。这会将事务应用到该类中的所有方法。这种方式的问题在于所有的方法,包括简单的读取方法和设置方法也都运行在事务中了,尽管根本不需要这么做。XMLAOP事务管理能更好地处理这种情况。说明虽然说通过使用@Transactional注解会使所有方法运行在事务中,但我还要再多说几句:其实准确的说法应该是如果某个类被@Transactional注解所修饰,那么该类实例化的Springbean的所有方法都是事务性的。
本文标题:spring使用基于注解的AOP事务管理
链接地址:https://www.777doc.com/doc-2850076 .html