0.SpringAop之基础

最近在看Spring Aop的源码,大致流程也差不多看懂了,希望通过写几篇源码解析来更加细致的了解Spring中的Aop,这一篇介绍一下Aop里面的概念以及怎么使用

1.核心概念

横切关注点

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

切面(aspect) 类是对物体特征的抽象,切面就是对横切关注点的抽象

连接点(joinpoint)

被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

切入点(pointcut) 对连接点进行拦截的定义

通知(advice) 所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

目标对象 代理的目标对象

织入(weave) 将切面应用到目标对象并导致代理对象创建的过程

引入(introduction) 在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

2.Spring对Aop的支持

Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:

1.默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了

2.当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB

AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:

1.定义普通业务组件

2.定义切入点,一个切入点可能横切多个业务组件

3.定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作

所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,即:代理对象的方法=增强处理+被代理对象的方法。

3.如何使用Aop

针对Spring Aop常用的几种使用方式,我写了几个demo,git地址为git地址

使用方式为以下几种

声明式Aop:ProxyFactoryBean

编程式Aop:ProxyFactory

声明式Aop基于配置:DefaultAdvisorAutoProxyCreator

声明式Aop基于配置:Aspect-xml

声明式Aop基于注解:Aspect-Annotation

4.Spring中的Aop

在Spring中对Aop抽象了几个模型,Advice,PointCut,Advisor,Inteceptor,Invocation具体关系如下Advisor由Advice和PointCut组成Advisor会根据方法元信息生成Inteceptor调用链Invocation通过Inteceptor调用链执行横切逻辑

所以在上一节中的所有使用方式都是逃不开这几个模型,对于Aspect模块来说,主要用到了它的execution表达式的PointCut,用来筛选匹配方法。而传统的匹配模式一般是正则,方法名等。

接下来我会从上一节的5种Aop使用方式讲解源码

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711G02EZW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券