0.SpringAop之基础

Posted Java后端笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

使用方式为以下几种

  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由Advice和PointCut组成 Advisor会根据方法元信息生成Inteceptor调用链 Invocation通过Inteceptor调用链执行横切逻辑

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

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


以上是关于0.SpringAop之基础的主要内容,如果未能解决你的问题,请参考以下文章

SpringAOP(注解方式实现面向切面编程)之常用BeforeAfterAround

彻底征服 Spring AOP 之 实战篇

低代码开发平台都有哪些?

SpringBoot之集成SpringAOP分析

SpringBoot之集成SpringAOP分析

Spring学习(二十五)Spring AOP之增强介绍