AOP是什么
AOP是 Aspect Oriented Programing 的简称,普遍翻译为“面向方面编程”,但是“面向切面编程”更为合理。
当我们的代码无法通过抽象来消除重复性的横切代码时,aop为此提供了解决方案。
- 连接点(JoinPoint)
- 程序执行的某个特定位置,如类初始化前,初始化后,方法调用前后,抛出异常等。一个类或一段程序代码用友一些具有边界性质的特定点,这些代码中的特定点就叫做连接点。
- 切点(PointCut)
- 每个程序类有多个连接点,在众多连接点中,如何定位感兴趣的连接点就需要切点。可以把一个切点看作是定位一组有相同特征连接点的方法。
- 增强(Advice)
- 增强是为目标类织入一段程序代码。
- 目标对象(target)
- 增强代码织入的目标
- 引介(Introduction)
- 引介是一种特殊的增强,为类添加一些属性和方法。比如动态的添加接口和实现逻辑
- 织入(Weaving)
- 织入是将增强添加到目标类的具体过程
- 编译期织入,需要特殊的java编译器
- 类装载期织入,需要特殊的类装载器(LTW load time weaving)
- 动态代理织入(Jdk的动态代理,cglib的动态代理)Spring使用的是动态代理织入,AspectJ使用的是编译期织入和类装载期织入
- 织入是将增强添加到目标类的具体过程
- 代理(Proxy)
- 一个类被aop织入增强后的结果类,融合了原类方法的逻辑和增强逻辑
- 切面(Aspect)
- 切面是由切点和增强组成的,包括横切逻辑的定义和连接点的定义