【Spring学习笔记】AOP
2016-09-05 00:25
274 查看
1. 背景
这次笔记的内容主要记录Spring AOP的基础知识,在最近的开发工作中出现好几次数据没有被存到数据库的状况,自己debug了好久也没有发现在逻辑上出现了什么问题.倒腾了很久,才发现自己写的service方法的名称没有符合项目中的规范命名,自己就看了看项目是如何实现这样的机制,下面是项目中简化配置示例:
<tx:advice id="dao.txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" isolation="REPEATABLE_READ" /> <tx:method name="save*" isolation="REPEATABLE_READ" /> <tx:method name="update*" isolation="REPEATABLE_READ" /> <tx:method name="del*" isolation="REPEATABLE_READ" /> <tx:method name="do*" isolation="REPEATABLE_READ" /> <tx:method name="*" isolation="REPEATABLE_READ" read-only="true" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* com.xxxx..*.service..*.*(..))" advice-ref="dao.txAdvice" order="200" /> </aop:config>
2. 理解
xml配置中的前半部分是描述哪些方法上将会使用事务,通过配置可以简单的了解到,方法名以”insert”, “save”, “update”, “del”或”do”等开头的都将使用数据库事务来管理,以保证数据的一致性,而对于其他的命名的方法,则只具有`read-only=true’权限,即只有读取的权限,各种对数据库数据修改操作都将不生效,这下我可找到原因了.同时也说明了写程序时,方法名不要随便乱取,按照统一的规范命名,因为规范的命名可能对应这相关的处理细节.<aop:config> </aop:config>这个xml元素是用来配置Spring AOP, AOP的中文名称是面向切面编程,在当前项目的配置中可以看到对事务的处理深度是在service包下的类,所以
Spring AOP可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。
这样做的好处是业务组件只需要关心自己应该处理的业务逻辑,而不需要把这些与业务逻辑不相关的代码耦合在一起.
3. AOP相关术语
下图是AOP中相关元素之间的关系图1) Aspect :切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面;
2) Join point :连接点,也就是可以进行横向切入的位置;
3) Advice :通知,切面在某个连接点执行的操作(分为: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice );
4) Pointcut :切点,符合切点表达式的连接点,也就是真正被切入的地方;
4. AOP 的实现原理
AOP分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP。
Spring的AOP为动态AOP,实现的技术为: JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术) 。尽管实现技术不一样,但 都是基于代理模式 , 都是生成一个代理对象 。
参考:
1. Spring AOP 深入剖析
2. Spring In Action
相关文章推荐
- [原]spring学习笔记9.2-Spring对Aop的支持-annotation的方式
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- Spring 2.5.6学习笔记 之 AOP
- Spring 学习笔记 (二)--AOP
- spring AOP 学习笔记
- [原]spring学习笔记9.1.2-Spring对Aop的概念性介绍
- Spring Aop Step-By-Step 学习笔记(下)
- Spring Aop Step-By-Step 学习笔记(上)
- spring学习笔记: Spring AOP
- Spring.NET学习笔记13——AOP的概念(基础篇) Level 200
- [原]spring学习笔记9.1-Spring对Aop的支持-AOP基础篇
- Spring视频学习笔记(4)代理模式及AOP术语
- ITCAST视频-Spring学习笔记(使用Spring配置文件实现AOP)
- Spring.Net实现AOP以及AOP相关概念(学习笔记四)
- Spring Aop Step-By-Step 学习笔记(上)
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- Spring学习笔记3--面向切面(AOP)的例子
- Spring Aop Step-By-Step 学习笔记(上)
- Spring学习笔记(14)----使用Spring的注解方式实现AOP
- Spring的AOP学习笔记