AOP简介
AOP:面向切面编程,是一种编程范式,弥补了OOP的不足,基于OOP基础上进行横向开发。
AOP主要关注同一层面的各个不同功能模块之间的共性功能,将共性功能抽取出来,做成可插拔式的程序。(在不改变源代码的情况下,对某个类的具体方法进行增强)
AOP相关术语
目标对象类:需要操作的类。
目标对象(Target Object):指的是需要被增强的对象(被代理对象)。
连接点(Joinpoint):目标对象类中的所有方法(被拦截到的点)。
切入点(point):目标对象中被抽取的共性功能的方法是后期需要增强的方法。(注:连接点不一定是切入点,切入点一定是连接点)
通知(Advice):将目标对象中共性功能抽取出来形成的方法。
通知类:通知对应的类。
切面(Aspect):切入点和通知之间的关系。
AOP代理(AOP proxy):通过代理生成代理类的过程(一个类被AOP织入增强后,就产生一个结果代理类)。
织入(Weaving):动态的将通知加入到切入点对应位置的动作(过程)成为织入。
引入(引介)(Introdcution):引入机制可以为类添额外的成员变量或成员方法,在编译期或类加载期完成。
AOP相关术语
AOP主要分为静态AOP和动态AOP。
静态AOP:AspectJ实现的AOP,将切面代码直接编译到Java类文件中。
动态AOP:将切面代码进行动态织入实现的AOP。
实现的技术为:JDK提供的动态代理和cglib(动态字节码增强技术)。
JDK动态代理:(要增强的类必须要实现一个借口)创建一个代理类,让代理类实现和目标类相同的借口,通过InvocationHandler来进行增强,代理类和目标类是兄弟关系,不可以将代理类转换成目标类。
CGLIB动态代理:(任意一个类都可以使用的代理)创建一个代理类,让代理类继承目标类,通过callback(MethodInterceptor)来进行增强,代理类和目标类是父子关系,可以将代理类转成目标类。