AOP是如何利用代理实现功能的织入,想要了解AOP的基本运行流程,那我们首先得知道它的一些基本概念。
基本概念
- 关注点
就是所关注的公共功能,比如像事务管理,就是一个关注点。表示 “要做什么”。
- 连接点(Joinpoint)
一个连接点总是代表一个方法的执行。表示“在什么地方做”。
- 通知(Advice)
通知有各种类型,其中包括“around”、“before”和“after”等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。表示 “具体怎么做”。
- 切面/方面(Aspect)
一个关注点的模块化,这个关注点可能会横切多个对象。 综合表示“ 在什么地方,要做什么,以及具体如何做”。
- 切入点(Pointcut)
一般是配制,切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。简单来说就是“很多连接点的集合”。
- 目标对象(Target Object)
Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
- AOP代理(AOP Proxy)
简单来说就是动态代理的实现。
- 织入(Weaving)
把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象的过程。也就是说织入是一个过程。
AOP基本运行流程
在下图中,目标对象就是我们的核心业务功能类。我们需要在3个方法处理添加一些公共功能,在AOP中我们需要添加的这些公共功能就是上面我们所说的关注点。
要利用切面,我们不直接在3个方法进行调用,将方法进行抽取出来分离关注点,被通知的对象Advice。
spring会根据配制文件中配制的切入点去匹配target中方法的调用,从而知道哪些方法需要增加。
当客户端调用这些方法时,直接调用的是代理对象的方法。
AOP通过配制文件中配制的切入点与Advice,从而找到指定方法需要增强的功能。
最终通过代理将Advice动态织入到指定方法。