首页 > 其他分享 >springAOP

springAOP

时间:2022-10-25 16:36:31浏览次数:61  
标签:调用 通知 切面 Louzai AOP springAOP 方法

1.1 什么是 AOP ?

AOP 的全称是 “Aspect Oriented Programming”,即面向切面编程

在 AOP 的思想里面,周边功能(比如性能统计,日志,事务管理等)被定义为切面,核心功能和切面功能分别独立进行开发,然后把核心功能和切面功能“编织”在一起,这就叫 AOP。

AOP 能够将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

1.2 AOP 基础概念

  • 连接点(Join point):能够被拦截的地方,Spring AOP 是基于动态代理的,所以是方法拦截的,每个成员方法都可以称之为连接点;
  • 切点(Poincut):每个方法都可以称之为连接点,我们具体定位到某一个方法就成为切点;
  • 增强/通知(Advice):表示添加到切点的一段逻辑代码,并定位连接点的方位信息,简单来说就定义了是干什么的,具体是在哪干;
  • 织入(Weaving):将增强/通知添加到目标类的具体连接点上的过程;
  • 引入/引介(Introduction):允许我们向现有的类添加新方法或属性,是一种特殊的增强;
  • 切面(Aspect):切面由切点和增强/通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义。

上面的解释偏官方,下面用“方言”再给大家解释一遍。

  • 切入点(Pointcut):在哪些类,哪些方法上切入(where);
  • 通知(Advice):在方法执行的什么时机(when:方法前/方法后/方法前后)做什么(what:增强的功能);
  • 切面(Aspect):切面 = 切入点 + 通知,通俗点就是在什么时机,什么地方,做什么增强;
  • 织入(Weaving):把切面加入到对象,并创建出代理对象的过程,这个由 Spring 来完成。

5 种通知的分类:

  • 前置通知(Before Advice):在目标方法被调用前调用通知功能;
  • 后置通知(After Advice):在目标方法被调用之后调用通知功能;
  • 返回通知(After-returning):在目标方法成功执行之后调用通知功能;
  • 异常通知(After-throwing):在目标方法抛出异常之后调用通知功能;
  • 环绕通知(Around):把整个目标方法包裹起来,在被调用前和调用之后分别调用通知功能。

 

aop工作流程:

 

 

第一块就是前置处理,我们在创建 Louzai Bean 的前置处理中,会遍历程序所有的切面信息,然后将切面信息保存在缓存中,比如示例中 LouzaiAspect 的所有切面信息。

第二块就是后置处理,我们在创建 Louzai Bean 的后置处理器中,里面会做两件事情:

  • 获取 Louzai 的切面方法:首先会从缓存中拿到所有的切面信息,和 Louzai 的所有方法进行匹配,然后找到 Louzai 所有需要进行 AOP 的方法。
  • 创建 AOP 代理对象:结合 Louzai 需要进行 AOP 的方法,选择 Cglib 或 JDK,创建 AOP 代理对象。

     

     第三块就是执行切面,通过“责任链 + 递归”,去执行切面。

 

他其中的责任链是通过数组遍历实现的。责任链一般会有一个next对象,当next执行到最后一个或者中途出了问题就会退出。但因为aop中的next对象是不同类型的,所以巧妙的放在了数组中。

标签:调用,通知,切面,Louzai,AOP,springAOP,方法
From: https://www.cnblogs.com/gujiajie/p/16825298.html

相关文章

  • SpringAOP之通过注解方式实现
    通过注解的方式1)导入jar包<!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.3.Release</ve......
  • SpringAOP两种使用方式
    1.通过配置文件织入1)导入jar包<!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3......
  • springaop笔记
    springaop解决的问题什么是增强增强代码,比如买装备在不惊动源代码的基础上对代码进行更改,增强,什么是aop第一步导入坐标第二步创建aop文件夹@Aspect作用标识此......
  • SpringAOP源码分析
    AOP源码流程源码基于:Spring5.3.23版本当Spring开启切面后,会向Spring容器中添加一个BeanPostProcessor,即AbstractAutoProxyCreator,即对象通过反射初始化后执行的一个处理......
  • SpringAop切入点execution表达式的深入讲解
    目录一、Aspect切入点语法定义二、如何定义多个切入点,在多个表达式之间如何表示  三、execution表达式五、方法签名表达式六、其他替代的切入点指示符七、通配......
  • SpringAOP
    1.日志处理的问题2.什么是AOP?通过代理模式,可以在指定位置执行对应流程。这样就可以将一些横向的功能抽离出来形成一一个独立的模块,然后在指定位置插入这些功能。这......
  • SpringAop使用
    此文章直接进入aop的使用,aop的相关概念请自行补:推荐链接: https://blog.csdn.net/q982151756/article/details/80513340 进入正题。Advice的5种类型: beforeadvi......