我对aop的通俗理解

来源:互联网 发布:英制螺纹大小径算法 编辑:程序博客网 时间:2024/04/25 16:45

1.通知(Advice):
在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
(定义了切面是什么以及何时使用)

2.连接点(Joinpoint):
程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
(2.1.运行时。2.2程序能够应用通知的一 个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。)

3.切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解, MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上。
(切入点是连接点的抽象表示,连接点是一个具体,切入点是一个抽象。
3.1预先设定规则,进行切入。
3.2通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,spring中允许我们方便的用正则表达式来指定。

4.切面(Aspect)
通知和切入点共同组成了切面:时间、地点和要发生的“故事”

5.引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口
(引入允许我们向现有的类添加新的方法和属性【spring提供了一个方法注入的功能】)

6.目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。POJO
(即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻辑,有了AOP之后它可以只关注自己要做的事。目标对象将被代理,代理执行完切面的业务之后,再执行被代理对象真正的业务逻辑

7.代理(proxy)
应用通知的对象,详细内容参见设计模式里面的代理模式
(换句话:就是代理做了切面的业务,也做了真正的业务。)
AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

8.织入(Weaving)
把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:
(1)编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器
(2)类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码
(3)运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了JDK的动态代理技术