`

spring声明式事务策略 aop拦截-学习笔记

阅读更多

 

声明式事务管理:

Spring提供了声明式事务管理。是通过Spring AOP实现的。

Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的,spring的在这段时间内通过拦截器,加载事务切片。原理就是这样的,可以参考JDK动态代理实例。

Spring中进行事务控制:

动态代理的一个重要特征是,它是针对接口的,所以我们的DAO要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来决解问题,但这不是spring推荐的方式。

大多数spring用户选择声明式事务管理。这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。

从考虑EJB CMT和spring声明式事务管理的相似以及不同之处出发是很有益的。他们的基本方法是相似的:都可以指定事务管理到单独的方法;如果需要可以在事务上下文调用setRollbackOnly()方法。不同之处如下:

1、不像EJB CMT绑定在JTA上,spring声明式事务管理可以在任何环境下使用。只需要更改配置文件,它就可以和JDBC、JDO、Hibernate或其他的事务机制一起工作。

2、spring可以使声明式事务管理应用到普通的Java对象,不仅仅是特殊的类,如EJB。

3、spring提供声明式回滚规则:EJB诶呦地域的特征,回滚可以声明式控制,不仅仅是编程式的。

4、spring允许你通过AOP定制事务行为。如:如果需要,可以在事务回滚中插入定制的行为。也可以增加任意的通知,就像事务通知一样。使用EJB CMT,除了使用setRollbackOnly(),你没有办法能够影响容器的事务管理。

5、spring不提供高端应用服务器的跨越远程调用的事务上下文传播。如果你需要这些特征,推荐你使用EJB。然而,不要轻易使用这些特性。通常我们并不希望事务跨越远程调用。


回滚规则的概念:他们使得我们可以指定哪些异常应该发起自动回滚。我们在配置文件中,而不是Java代码中,以声明的方式指定。因此,虽然我们仍然可以编程调用TransactionStatus对象的setRollbackOnly()方法来回滚当前事务,多数时候我们可以指定规则,如MyApplicationException应用导致回滚。这有明显的优点,业务对象不需要依赖事务基础设施。例如:通常不需要引入任何Spring API,事务或其他任何东西。

EJB的默认行为是遇到系统异常(通常是运行是异常),EJB容器自动回滚事务。EJB CMT遇到应用程序异常(除了java.rmi.RemoteExcepiton外的checked异常)是不需要自动回滚事务。虽然Spring声明式事务管理沿用EJB的约定(遇到unchecked异常自动回滚事务),但是这是可以定制的。

Spring声明式事务管理的性能要胜过EJB CMT。

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	
	<!-- 
		打开配置项,这个配置项是对@Aspectj这个注解进行支持 注解本身是不能干活的,注解之所以能干活是因为后面有处理器对其进行处理
		这个配置相当于我们将要使用的@Aspectj注解提供了解析的功能
	 -->
	<aop:aspectj-autoproxy />
	<context:component-scan base-package="com.sample.*"/>
	<bean id="apectBean" class="com.sample.service.MyInterceptor2"/>
	<aop:config>
		<aop:aspect id="asp" ref="apectBean">
			<aop:pointcut id="mycut" expression="execution (void com.sample.service.impl.PersonServiceBean*.*(String))"/>
			<aop:before pointcut-ref="mycut" method="doAccessCheck" arg-names="name" />
			<aop:after pointcut-ref="mycut" method="doAfter"/>
			<aop:after-returning pointcut-ref="mycut" method="doAfterReturning"/>
			<aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/>
			<aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
		</aop:aspect>
	</aop:config>
	
	<aop:config>
		<aop:aspect id="myAOP" ref="check">
			<aop:pointcut id="target" expression="execution(* com.sample.service.Common.execute2(..))"/>
			<aop:before method="checkValidator" pointcut-ref="target"/>
			<aop:after method="addLog" pointcut-ref="target"/>
		</aop:aspect>
	</aop:config>
</beans>
 

 

 

 

分享到:
评论

相关推荐

    Spring&Mybatis&SpringMVC总结笔记-最全最基础.pdf

    Spring事务的实现方式主要有编程式事务管理和声明式事务管理。编程式事务需要编写代码来管理事务边界,而声明式事务则通过XML配置或注解方式将事务管理与业务逻辑分离。Spring框架的事务管理有其优点,如统一的事务...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring技术内幕 学习笔记

    这部分内容会涉及到事务管理,如编程式和声明式事务,以及如何通过Spring Data简化数据库操作。 最后,Spring Boot是近年来非常流行的快速开发工具,它集成了大量Spring生态系统的组件,并提供了自动配置功能,极大...

    Spring AOP 使用笔记

    Spring AOP提供了@Transactional注解,可以方便地进行声明式事务管理。只需在服务层的方法上添加该注解,Spring就会自动进行事务的开启、提交或回滚。例如: ```java @Service public class UserService { @...

    Spring框架,学习笔记,很优秀的资料

    - **事务管理**:Spring提供了声明式和编程式的事务管理,可以方便地进行事务控制。 - **MVC框架**:Spring MVC提供了一种优雅的方式处理HTTP请求,模板引擎和视图解析,以及强大的模型绑定和数据验证功能。 - **...

    spring学习笔记.doc

    2. 事务管理:Spring提供了一种声明式事务管理方式,无需编写复杂的事务传播代码。 3. 单例模式:Spring默认会将bean设置为单例模式,确保在整个应用中只有一个实例。 4. AOP支持:Spring的面向切面编程允许开发者...

    Spring学习笔记 包括SSH的整合

    3. **事务管理**:Spring提供了声明式事务管理,可以跨越多个DAO操作,确保数据的一致性。 4. **Action和Service层**:Struts2的Action对象通常只负责接收请求和转发到相应的Service方法,业务逻辑在Service层处理,...

    spring教程,spring入门

    -声明式事务管理:通过@Transactional注解在方法上声明事务边界。 以上就是Spring框架的一些基础知识点,从入门到精通,需要不断学习和实践,逐步掌握其精髓。通过Spring教程和笔记,你可以深入理解并运用这些知识...

    spring+struts集成学习笔记和项目源码

    3. **事务管理**:Spring 提供的声明式事务管理可以无缝集成到Struts应用中,简化了事务控制的复杂性。 在提供的"spring+struts集成学习笔记和项目源码"中,你将有机会深入理解这些概念,通过实际操作来学习如何将...

    spring框架案例学习文档笔记

    - **AspectJ**:一种强大的AOP框架,支持声明式的切面编程。 - **专业术语**: - **Aspect**:定义了一个切面。 - **Join Point**:程序执行过程中的某个特定点。 - **Pointcut**:匹配Join Point的表达式。 - ...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    6. **事务管理**: 提供编程和声明式事务管理,与Spring整合时通常使用声明式事务。 **Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1...

    传智博客Spring框架2016版笔记资料

    同时,可能还会探讨Spring的事务管理,包括编程式和声明式事务,以及如何在业务逻辑中实现事务的回滚和提交。 day03可能会转向Spring MVC,这是Spring框架中用于构建Web应用程序的一部分。这部分内容可能涵盖模型-...

    J2EE (SSH)学习笔记

    Spring的声明式事务管理让开发者无需手动编写事务代码,提高了代码的可读性和可维护性。 **Hibernate框架** Hibernate是一个强大的ORM(Object-Relational Mapping,对象关系映射)框架,它将Java对象与数据库中的...

    Spring學習筆記DEMO代碼(二)

    1. Spring声明式事务管理的工作原理。 2. 如何在Spring中配置Hibernate事务管理。 3. `@Transactional`注解的使用及其属性含义。 4. 如何处理事务的异常和回滚规则。 5. 实现Spring和Hibernate的无缝集成,提升代码...

    spring培训第四天

    此外,我们可能还会讨论到Spring的事务管理,了解如何使用@Transactional注解实现声明式事务处理。 总的来说,Spring培训的第四天将带你深入理解Spring框架的核心技术,包括DI、AOP和Spring MVC,这些都是Spring...

    J2EE框架_笔记 struts spring hibernate

    - **Spring的事务管理**:熟悉编程式和声明式事务管理,以及如何在Spring中配置事务边界。 - **Spring整合Hibernate**:学习如何将Hibernate集成到Spring应用中,利用Spring的数据访问抽象层(如HibernateTemplate或...

    spring2.0宝典一书笔记

    AOP 通过切面(Aspect)和通知(Advice)来定义关注点的分离,提供了声明式事务管理,使得事务管理变得简单且易于维护。 4.6 持久化支持 Spring 提供了对各种持久化技术的支持,包括 JDBC、JPA、Hibernate 等。...

    java常用框架学习笔记

    Spring 2.x版本引入了许多新特性,比如改进的AOP支持、增强的声明式事务管理等。 #### Annotation(Spring高版本) 随着Spring的发展,注解成为了配置Spring应用的主要方式。Spring 3引入了大量的新注解,如`@...

Global site tag (gtag.js) - Google Analytics