AOP和Spring AOP介绍
文章目录
- AOP和Spring AOP介绍
- 一.AOP简介
- 二. 传统开发存在的弊端
- 三. AOP实现原理
- 四.Spring AOP
- 五.AOP相关术语
一.AOP简介
- AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,函数式编程的一种衍生范型;
- AOP 通过预编译方式和运行期动态代理实现程序功能的统一维护;
- 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
二. 传统开发存在的弊端
假设你正在开发的项目中需要在保存之前添加一个功能(例如权限校验),此时需要手动在项目中所有保存功能之前添加权限校验,我们可以通过抽取一个基类,里面写了权限校验功能,让所有类继承此类,这是传统面向对象继承的方式开发,需要改动大量代码;
我们的目标: 不破坏原来的类,生成一个代理类,在原来类的基础上进行增强,可以实现随时添加,随时取消添加的功能
解决: AOP通过代理类采用横向抽取机制取代了传统纵向继承
三. AOP实现原理
- JDK动态代理
JDK动态代理的实现是在运行时,根据一组接口定义,使用Proxy、InvocationHandler等工具类去生成一个代理类和代理类实例。
- cglib动态代理
cglib是一个第三方开源代码生成类库(使用时一定要在spring的核心包当中引入cglib),cglib动态添加类的属性和方法,采用的是继承方式来产生的代理对象
四.Spring AOP
- Spring使用这种思想最好的框架
- Spring的AOP有自己的实现方式,但是这种方式非常繁琐,因此Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发
- AspectJ 是一个AOP的框架
五.AOP相关术语
-
Joinpoint:连接点
(1)可以被拦截到的方法
(2) 能够被增强的方法,这些方法就可以称为是连接点
其中save() ,delete() ,update() ,find()都是 Joinpoint连接点
-
Pointcut:切入点
真正被拦截(增强)的方法
其中的save()方法就是 Pointcut切入点
- Advice:通知
增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知
其中的checkPrivilege()方法就是Advice通知
- Introduction:引介
(1)类层面的增加
(2)给原有的类添加一些新的属性方法
(3)在开发中通常都是给某个方法进行增加
- Target:被增加的对象
其中GoodsDao就是Target被增加的对象
- Weaving:织入
将通知应用到目标对象的过程
- Proxy:代理对象
- Aspect:切面
多个通知和多个切入点的集合