1. 介绍
1)在不改变原程序的基础上增加新的代码满足新需求,应用在:权限认证、日志、事务。
2)面向切面编程,分离系统中的各种关注点,把核心关注点和横切关注点分离开来。
2. AOP两种代理机制(JDK动态代理、CGlib动态代理)
1)JDK动态代理
针对实现了接口的类的代理
生成的代理类和委托类都实现了相同的接口
采用反射机制调用委托类
2)CGlib动态代理
针对没有实现接口的类的代理
代理类是委托类的子类,且不能别final修饰
采用类似索引的机制调用委托类
3. 相关概念
1)连接点(JoinPoint)
具有特定功能的方法,类中的所有方法。
2)切入点(Pointcut)
缺少共性功能的方法。
切入点一定是连接点,连接点不一定是切入点。
3)通知(Advice)
抽取共性功能组成的独立代码逻辑(方法)。
抽取代码在切入点的具体位置,称为通知类别:前置通知、后置通知、环绕通知等。
4)引入(introduction)(了解)
引入机制可以为类添加额外的成员变量或成员方法。
引入机制是在编译期或类加载期完成的。
5)目标对象(target Object)
被抽取了共性功能后,缺少完整逻辑代码不能独立运行的对象。
指包含切入点的类对象。
6)代理对象(AOP Proxy)
将抽取共性功能的类对象创建出来。
代理目标对象,把通知织入到目标对象的切入点处,成为一个完整能运行的对象。
7)切面(Aspect)
是一个设计概念,切入点和通知的绑定关系。
8)织入(weaving)
代理对象把通知织入到目标对象切入点位置的动作称为织入,是一个动态的运行过程。