学习AOP之前,先了解AOP中常用术语
1、切面(Aspect)切面是一个总的概念。是对aop的中文解释,就行java中的类一样 。 切面是一个关注点的模块化,如事务管理就是一个在JavaEE企业中应用最常见的切面。在企业应用编程中,首先需要通过分析,抽取出通用的功能,即“切面”。 事务、日志、安全性的框架、权限都是切面。
2、连接点(Joinpoint) 我们的应用可能有数以千计的时机应用通知。这些时机被称 为连接点。连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。
3、通知(Advice) 通知就是切面的具体实现。通知将在切面的某个特定的连接点上执行动作,Spring中执行的动作往往就是调用某一个类的具体方法。例如:在保存订单的模块中,进行日志管理(一个切面),具体是在保存订单的方法执行之前(连接点)执行写日志(通知)的功能。其中,日志管理是很多模块中通用的功能,因此这就是一个切面,而具体是在保存订单之前执行日志保存,那么保存订单前这个点就是连接点,实现日志保存功能的类就是通知。 就是切面中的方法。
spring切面可以实用的5种类型通知:
-
前置通知(Before):在目标方法被调用之前调用通知功能;
-
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
-
返回通知(After-returning):在目标方法成功执行之后调用通知;
-
异常通知(After-throwing):在目标方法抛出异常后调用通知;
-
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
5、切入点(Pointcut) 连接点的集合描述。
切点定义了从何处切入。切点的定义会匹配通知所要织入的一个或多个连接点。通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。
切入点是连接点的集合,通知将在满足一个切入点表达式的所有连接点上运行。
举例: 在拦截器中,有一系列判断性的内容
6、引入(Introduction)
引入允许我们向现有的类添加新方法或属性。
7、织入(Weaving)
织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。
-
编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
-
类加载期:切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ 5的加载时织入(load-timeweaving,LTW)就支持以这种方式织入切面。
-
运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。Spring AOP就是以这种方式织入切面的。
9、目标对象(Target Object)
被一个或多个切面所通知的对象成为目标对象。
参考资料:
https://segmentfault.com/a/1190000013343102