AOP面向切面编程
- AOP (Aspect Orient Programming) 面向切面编程是从动态角度考虑程序的运行过程
- AOP底层,就是采用动态代理模式实现的,采用了两种代理,JDK的动态代理和CGLib的动态代理
- 实际上AOP就是动态代理的一种规范化,因为动态代理种类繁多,掌握较难,所以就规范了一套统一的方式,这就是AOP
- AOP把动态代理的实现步骤,方式都定义好了,让开发人员用一种统一的方式,去用动态代理。
动态代理实现方式(两种)
JDK:
- JDK动态代理,要求jdk中有Proxy,Method,InvocationHandler创建代理对象
- JDK动态代理要求目标类必须实现接口
CGLib
- 第三方的工具库,创建代理对象,原理是继承,通过继承目标类创建子类,子类就是代理对象
- CGLib要求目标类不能是final的 方法也不能是final的
动态代理的作用
- 可以在目标类源代码不改变的情况下去增加功能
- 减少重复代码
- 专注业务逻辑代码
- 解耦合,让你的业务功能和日志,事务非业务功能分离
对AOP面向切面编程的理解
- AOP Aspect:切面 给你目标类增加的功能就是切面,就比如要添加的日志 他就属于切面
- 切面的特点:一般都是非业务方法,可以独立使用
- AOP Orient:面向
- AOP Programming:编程
1. 需要在分析项目功能时,找出切面。(并不是所有功能都能当切面)
2. 合理的安排切面的执行时间(在目标方法前面,还是在目标方法后面)
3. 合理的安排切面执行的位置,在哪个类,在哪个方法增加增强功能
什么时候使用AOP技术
- 当你要给一个项目存在的类修改功能,但是原有的类的功能不完善,并且没有源代码,就可以使用aop增加功能
- 给项目中的多个类,增加一个相同的功能,使用aop给业务方法增加是事务,日志输出
面向切面编程的术语
- Aspect:切面,表示增强的功能,就是一堆代码,完成某一个功能,非业务功能,
常见的切面功能:日志,事务,统计信息,参数检查,权限验证 - JoinPoint:连接点 连接业务方法和切面的位置,其实就是类中的业务方法
- Pointcut:切入点 指多个连接点方法的集合
- 目标对象:给哪个类的方法添加功能,这个类就是目标对象
- Advice:通知, 通知表示切面功能执行的时间,(在方法之前还是在方法之后)
一个切面有三个关键的要素:
- 切面的功能代码,Aspect 切面要干什么
- 切面的执行位置,Pointcut 也就是在那个方法里加功能
- 切面执行的时间,Advice 也就是在方法前还是后