SpringAOP简介
AOP(Aspect Orient Programming) --- 面向切面编程
将分散在各个业务逻辑中的相同代码 通过 “横向”切割方式抽取到独立模块中 方式抽取到独立模块中;【它针对的是程序运行中的各个步骤】
优点:增强代码复用性,使编程人员专注业务于逻辑的实现;
Spring AOP简介:
Spring AOP是基于动态代理的
Spring AOP既支持JDK动态代理,也支持CGLib动态代理
l 如果目标对象实现了接口,默认釆用JDK动态代理
l 当然可以强制使用CGLib动态代理
l 如果没有实现接口,则使用CGLib动态代理
Spring AOP将增强代码织入连接点的原理:扫描所有类 发现有实现增强接口的类则将其中重写的方法织入.
AOP的相关术语:
l 横切关注点
在一个业务流程中插入与业务无关的系统服务逻辑,这样的逻辑称为横切关注点;
l 连接点(Joinpoint):
程序执行过程中明确的点;
连接点是程序能够应用通知的一个“时机”,例如方法被调用时或异常被抛出时等等。
l 通知/增强(Advice):
拦截到连接点之后所要做的事情。
l 切入点(Pointcut)
一个通知被引发的一系列连接点的集合,可以看作连接点的抽象。
通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点。例如某个类或方法。
l 切面(Aspect) = 通知+切入点
将横切关注点抽象出来,形成一个对象,就称为切面;
时间、地点和要发生的“故事”
l 织入(Weaving):将切面应用到连接点的过程
l 引入(Introduction)
引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能)
l 目标(Target)
即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻辑,有了AOP之后它可以只关注自己要做的事(AOP让他做爱做的事)
l 代理(proxy)
应用通知的对象,详细内容参见设计模式里面的代理模式
把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:
(1)编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器
(2)类加载时:使用特殊的ClassLoader,在目标类被加载到程序之前增加类的字节代码
(3)运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了JDK的动态代理技术。
例如:A类中的methodA()调用B类中的methodB()方法
切入点:methodB()
切面:B类
连接点:methodA()
通知(增强):在特定的切入点执行增强处理,确定在methodA()前、中、后处理
最新文章
- 盒子模型(W3C盒子模型、IE盒子模型)
- Oracle环境变量NLS_LANG
- 使用guava带来的方便
- MYSQL导入导出.sql文件(转)
- JavaScript之点击文字放大
- jmeter 一个可能引起性能严重下降的断言设置
- 【转载】Restful 简介
- 听同事讲 Bayesian statistics: Part 1 - Bayesian vs. Frequentist
- 你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化
- 在C51中如何实现软复位?
- C++设计模式之状态模式(四)
- XP里面其实也讲究admin的执行权限
- Multitasking Apps may only use background services for their intended purposes
- spring的一些问题
- BZOJ 3669: [Noi2014]魔法森林 [LCT Kruskal | SPFA]
- Swift百万线程攻破单例(Singleton)模式
- ORACLE 启动过程
- HBase运维经验
- mysql入门知识
- div在另一个div居中对齐
热门文章
- cf#512 C. Vasya and Golden Ticket
- python3 爬虫爬取深圳公租房轮候库(深圳房网)
- 如何处理 jQuery $(window).resize() 中的方法被多次执行的小问题
- Java学习笔记-序
- VT-x VT-d 虚拟化在win10中的问题
- Dev c++ 调试步骤
- springMVC对jsp页面的数据进行校验
- 深度学习图像分割——U-net网络
- Ext JS 6学习文档-第4章-数据包
- zabbix 2.2.2 安装部署