【Spring学习笔记】AOP
来源:互联网 发布:redis存储数据大小 编辑:程序博客网 时间:2024/05/01 18:54
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 AOP学习笔记
- Spring AOP学习笔记
- Spring AOP学习笔记
- Spring AOP学习笔记
- Spring AOP学习笔记
- spring aop学习笔记
- spring aop学习笔记
- Spring AOP学习笔记
- spring AOP 学习笔记
- spring AOP学习笔记
- Spring AOP学习笔记
- Spring AOP学习笔记
- spring AOP 学习笔记
- Spring Aop 学习笔记
- spring aop学习笔记
- Spring-AOP学习笔记
- spring-aop学习笔记
- Spring AOP 学习笔记
- CodeForces-711D Directed Roads(拓扑排序+组合数)
- CSU 1809 Parenthesis 【前缀和+RMQ】
- 关于自定义view, 本人的总结以及看法
- 自定义Qt部件——盒状模型
- 开发时遇到的好玩的终端命令
- 【Spring学习笔记】AOP
- spark运行模式
- 【Android】51、动态添加碎片
- [LeetCode]Maximal Rectangle寻找最大矩形
- 关于struts2 2.5.2 的入门 遇到的问题 --总结1
- 继承、多态、封装、抽象类与接口
- CS231n第五课:神经网络2学习记录
- 自己做的购物系统
- POJ 3254 Corn Fields 状态压缩dp入门