一、AOP的基本概念
什么是AOP
定义:面向切面(方面)编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得其之间耦合度降低,提高程序可重用性,同时提高了开发效率。
通俗描述:不修改源代码方式,在主干功能里添加新的功能。
底层原理
AOP的底层原理使用的是动态代理。
两种情况
- 有接口的情况:使用JDK动态代理
- 创建接口实现类的代理对象,来增强类其中的一些方法。
- 无接口的情况:使用CGLIB动态代理
- 创建子类的代理对象,来增强类其中的一些方法。
二、JDK动态代理的实现
调用java.lang.reflect.proxy类的newProxyInstance方法
三个参数
- 类加载器
- 增强方法所在的类所实现的接口【数组形式,支持多个接口】
- 实现InvocationHandler接口的对象
代码实现
第1步 创建接口,定义方法
第2步 创建接口实现类,实现方法
第3步 使用Proxy类创建接口的代理对象
三、操作术语
连接点
定义:类中可以被增强的方法
切入点
定义:类中实际被增强的方法
通知(增强)
定义:实际被增强(通知)的逻辑代码
类型:
- 前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
切面
定义:描述动作,把增强(通知)应用到切入点的过程