0.SpringAop之基础

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

1.核心概念

  1. 横切关注点
    对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
  2. 切面(aspect)
    类是对物体特征的抽象,切面就是对横切关注点的抽象
  3. 连接点(joinpoint)
    被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
  4. 切入点(pointcut)
    对连接点进行拦截的定义
  5. 通知(advice)
    所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
  6. 目标对象
    代理的目标对象
  7. 织入(weave)
    将切面应用到目标对象并导致代理对象创建的过程
  8. 引入(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地址

使用方式为以下几种

  1. 声明式Aop:ProxyFactoryBean
  2. 编程式Aop:ProxyFactory
  3. 声明式Aop基于配置:DefaultAdvisorAutoProxyCreator
  4. 声明式Aop基于配置:Aspect-xml
  5. 声明式Aop基于注解:Aspect-Annotation

4.Spring中的Aop

在Spring中对Aop抽象了几个模型,Advice,PointCut,Advisor,Inteceptor,Invocation
具体关系如下
Advisor分为2种,PointCutAdvisor和IntroductionAdvisor
PointCutAdvisor由Advice和PointCut组成
IntroductionAdvisor用于向类引入其他接口实现,以后单独介绍,前期以PointCutAdvisor为主
Advisors会根据PointCut的MethodMatcher生成Inteceptor调用链
Invocation通过Inteceptor调用链执行横切逻辑,Invocation封装了实际Aop执行逻辑

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 团队开发框架实战—面向切面的编程 AOP 引言 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统...
    Bobby0322阅读 4,176评论 4 49
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,555评论 1 133
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,367评论 11 349
  • 开篇说明:本文以策略产品新人培养为背景,对强交互、强运营类产品适用程度有限。 食用方式:对于新指导人来说可以作为借...
    伊织崇子阅读 1,701评论 2 20