Spring AOP(面向切面编程)

server/2024/10/21 22:58:39/

1.Spring AOP 简介

1.1 AOP概述

AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程, 是通过预编译方式运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

1.2 AOP 的作用及其优势

作用 : 在程序运行期间,在不修改源码的情况下对方法进行功能增强
优势 : 减少重复代码,提高开发效率,并且便于维护

1.3 AOP 的底层实现

AOP 底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态生成代理对象,代理对象方法执行时进行增强功能的介入,再去调用目标对象的方法,从而完成功能的增强。

1.4 AOP 动态代理技术

常用的动态代理技术:

  • JDK 代理 : 基于接口的动态代理技术
  • cglib 代理 : 基于父类的动态代理技术
    在这里插入图片描述

1.5 JDK 动态代理技术

    1. 目标类接口
      在这里插入图片描述
    1. 目标类
      在这里插入图片描述
    1. 动态代理代码
      在这里插入图片描述
    1. 调用代理对象方法测试
      在这里插入图片描述

1.6 cglib 动态代理技术

    1. 目标类
      在这里插入图片描述
    1. 动态代理代码
      在这里插入图片描述
    1. 调用代理对象方法测试
      在这里插入图片描述

1.7 AOP 相关概念

Spring AOP 实现底层就是对动态代理代码进行封装,封装后我们只需要对需要关注的部分进行代码编
写,并通过配置的方式完成指定目标的方法增强。

AOP相关术语:

  • Target(目标对象) : 代理的目标对象
  • Proxy(代理) : 一个类被 AOP 织入增强后,就产生一个结果代理类
  • Joinpoint (连接点) : 所谓连接点指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
  • Pointcut(切入点) : 所谓切入点指我们要对哪些Joinpoint 进行拦截定义
  • Advice(通知/增强) : 所谓通知指拦截到 Joinpoint 之后所要做的事情
  • Aspect(切面) : 切面是切入点和通知(引介)的结合
  • Weaving(织入) : 织入指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而Aspect采用编译期织入和类装载期织入

1.8 AOP 开发明确事项

  1. 需要编写的内容
  • 编写核心业务代码(目标类的目标方法)
  • 编写切面类,切面类中有通知(增强功能方法)
  • 在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合
  1. AOP 技术实现的内容
    Spring 框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类别,在代理对象对应位置将通知对应的功能织入,完成完整代码的逻辑运行。

  2. AOP 底层使用哪种代理方式
    spring 中,框架会根据目标类是否实现接口来决定采用哪种动态代理的方式。

在这里插入图片描述

2. 基于 XML 的 AOP 开发

2.1 快速入门

    1. 导入 AOP 相关坐标
      在这里插入图片描述
    1. 创建目标接口和目标类(内部有切点)
      在这里插入图片描述
    1. 创建切面类(内部有增强方法)
      在这里插入图片描述
    1. 将目标类和切面类的对象创建权交给 spring
      在这里插入图片描述
    1. 在applicationContext.xml 中配置织入关系
      5.1 导入aop命名空间:
      在这里插入图片描述
      5.2 配置切点表达式和前置增强的织入关系:
      在这里插入图片描述
    1. 测试代码
      在这里插入图片描述

2.2 AOP – XML 配置详解

    1. 切点表达式写法
表达式语法: execution([修饰符] 返回值类型 包名.类名.方法名(参数))
  • 访问修饰符可以省略
  • 返回值类型、包名、类名、方法名可以使用星号*代表任意
  • 包名与类名之间一个点 . 代表当前包下的类,两个点 … 表示当前包及其子包下的类
  • 参数列表可以使用两个点…表示任意个数,任意类型的参数列表

在这里插入图片描述

    1. 通知类型
通知的配置语法: <aop:通知类型 method=“切面类中方法名” pointcut=“切点表达式"></aop:通知类型>

在这里插入图片描述

    1. 切点表达式抽取
      当多个增强的切点表达式相同时,可以将切点表达式进行抽取,在增强中使用 pointcut-ref属性代替 pointcut 属性来引用抽取后的切点表达式。
      在这里插入图片描述

3. 基于注解的 AOP 开发

3.1 快速入门

    1. 创建目标接口和目标类(内部有切点)
      在这里插入图片描述
    1. 创建切面类(内部有增强方法)
      在这里插入图片描述
    1. 将目标类和切面类的对象创建权交给 spring
      在这里插入图片描述
    1. 在切面类中使用注解配置织入关系
      在这里插入图片描述
    1. 在配置文件中开启组件扫描和 AOP 自动代理
      在这里插入图片描述
    1. 测试代码
      在这里插入图片描述

3.2 AOP – 注解配置详解

    1. 通知类型
通知配置语法 : @通知注解(“切点表达式")

在这里插入图片描述

    1. 切点表达式抽取
      抽取方式是在切面内定义方法,在该方法上使用 @Pointcut 注解定义切点表达式,然后在在增强注解中进行引用。
      在这里插入图片描述

http://www.ppmy.cn/server/6100.html

相关文章

CSS中的圆角和阴影

目录 盒子圆角 圆角基础使用 圆角常见使用 通过设置盒子圆角得到一个圆形 通过设置盒子圆角&#xff0c;得到一个“操场”的样式 盒子阴影 文字阴影 盒子圆角 圆角基础使用 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样我们的盒子就可以变圆角了。 使用…

【智能算法】星鸦优化算法(NOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;M Abdel-Basset等人受到克拉克的星鸦自然行为启发&#xff0c;提出了星鸦优化算法算法&#xff08;Nutcracker Optimization Algorithm, NOA&#xff09;。 2.算法原理 2.1算法思…

eBay、亚马逊自养号测评如何避免风控账号关联选择合适网络IP环境

在自养号下单中选择适合的网络环境至关重要。经过多次实践与测试&#xff0c;积累了大量的经验&#xff0c;希望能够与大家分享&#xff0c;帮助大家避开陷阱&#xff0c;顺利前行。 市面上的网络环境种类繁多&#xff0c;从纯IP类的Luminati、Rola&#xff0c;到纯环境类的VM…

多模态视觉语言模型:BLIP和BLIP2

1. BLIP BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP的总体结构如下所示&#xff0c;主要包括三部分&#xff1a; 单模态编码器&#xff08;Image encoder/Text encoder&#xff09;&#xff1a;分别进…

产品经理常用工具汇总

英文名称中文名称描述Axure原型原型图&#xff0c;流程图&#xff0c;框架图&#xff0c;原型图&#xff1b;Axhub团队原型共享Axure原型团队共享&#xff0c;链接转发&#xff1b;iconfont阿里矢量图标图标下载&#xff0c;协助原型和方案&#xff1b;visio流程图 业务流程图&…

【java】(软考)面向对象---责任链解析

目录 责任链的意义 手写笔记 ​编辑 责任链的意义 当您把请求给出时&#xff0c;如果某对象不能实现您的操作&#xff0c;责任链会自动把您的请求传给它的下一级 从而避免请求的发送者和接受者之间的耦合关系 这里以2007年下半年试题七进行说明 题目描述 某企业的采购审批…

机器学习理论基础—神经网络算法公式学习

机器学习理论基础—神经网络公式学习 M-P神经元 M-P神经元&#xff08;一个用来模拟生物行为的数学模型&#xff09;&#xff1a;接收n个输入(通常是来自其他神经 元)&#xff0c;并给各个输入赋予权重计算加权和&#xff0c;然后和自身特有的阈值进行比较 (作减法&#xff0…

信号分解 | VMD(变分模态分解)-Matlab

分解效果 VMD(变分模态分解) 变分模态分解(Variational Mode Decomposition,VMD)是一种信号分解方法,用于将非平稳信号分解为一组模态函数。VMD是一种自适应的数据驱动方法,可以有效地处理具有非线性和非平稳特性的信号。 VMD的基本思想是通过迭代优化过程,将原始信号分…