Spring —— AOP(面向切面编程)
AOP(Aspect Oriented Programming)简介
- 面向切面编程,一种编程范式,指导开发者如何组织程序结构
- 作用:在不惊动原始设计的基础上为其进行功能增强
- Spring理念:无入侵式/无侵入式
AOP核心概念

- 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
- 在SpringAOP中,理解为方法的执行
- 切入点(Pointcut):匹配连接点的式子
- 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
- 一个具体方法:com.cqupt.dao包下的BookDao接口中的无形参无返回值的save方法
- 匹配多个方法:所有的save方法,所有的get开头的方法,所有以Dao结尾的接口中的任意方法,所有带有一个参数的方法
- 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
- 通知(Advice):在切入点处执行的操作,也就是共性功能
- 功能最终以方法的形式呈现
- 通知类:定义通知的类
- 切面(Aspect):描述通知与切入点的对应关系
AOP入门案例







AOP 工作流程
1、Spring容器启动
2、读取所有切面配置中的切入点
3、初始化bean,判定bean对应的类中的方法是否匹配到任意切入点
*匹配失败,创建对象
*匹配成功,创建原始对象(目标对象)的代理对象
4、获取bean执行方法
*获取bean,调用方法并执行,完成操作
*获取的bean是代理对象时,根据代理对象的运行模式运行原始方法与增强内容,完成操作
AOP 核心概念
- 目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象时无法直接完成最终工作的
- 代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现
AOP 切入点表达式
- 切入点:要增强的方法
- 切入点表达式:要进行增强的方法的描述方式

- 切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法(参数)异常名)

- 可以使用通配符描述切入点,快速描述


AOP 通知类型
- 描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时,要将其加入到合理的位置
- AOP通知分5中类型
- 前置通知
- 后置通知
- 环绕通知(重点)
- 返回后通知(了解)
- 抛出异常后通知(了解)






AOP 小案例--万次执行效率

- 需要用到获取包名、方法名等来知晓具体那个方法执行的时间

AOP 通知获取数据
- 获取切入点方法的参数
- JoinPoint:适用于前置、后置、返回后、抛出异常后通知
- ProceedJoinPoint:适用于环绕通知
- 获取切入点方法返回值
- 返回后通知
- 环绕通知
- 获取切入点方法运行异常信息
- 抛出异常后通知
- 环绕通知


AOP 小案例--去除密码末尾的空格

Spring —— AOP(面向切面编程)的更多相关文章
- 详细解读 Spring AOP 面向切面编程(二)
本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...
- 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...
- spring AOP面向切面编程学习笔记
一.面向切面编程简介: 在调用某些类的方法时,要在方法执行前或后进行预处理或后处理:预处理或后处理的操作被封装在另一个类中.如图中,UserService类在执行addUser()或updateUse ...
- 【Spring系列】Spring AOP面向切面编程
前言 接上一篇文章,在上午中使用了切面做防重复控制,本文着重介绍切面AOP. 在开发中,有一些功能行为是通用的,比如.日志管理.安全和事务,它们有一个共同点就是分布于应用中的多处,这种功能被称为横切关 ...
- 从源码入手,一文带你读懂Spring AOP面向切面编程
之前<零基础带你看Spring源码--IOC控制反转>详细讲了Spring容器的初始化和加载的原理,后面<你真的完全了解Java动态代理吗?看这篇就够了>介绍了下JDK的动态代 ...
- Spring AOP面向切面编程详解
前言 AOP即面向切面编程,是一种编程思想,OOP的延续.在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等.在阅读本文前希望您已经对Spring有一定的了解 注:在能对代码进行添 ...
- Spring AOP 面向切面编程相关注解
Aspect Oriented Programming 面向切面编程 在Spring中使用这些面向切面相关的注解可以结合使用aspectJ,aspectJ是专门搞动态代理技术的,所以比较专业. ...
- Spring AOP 面向切面编程入门
什么是AOP AOP(Aspect Oriented Programming),即面向切面编程.众所周知,OOP(面向对象编程)通过的是继承.封装和多态等概念来建立一种对象层次结构,用于模拟公共行为的 ...
- 详细解读 Spring AOP 面向切面编程(一)
又是一个周末, 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之. ...
- Spring Aop面向切面编程&&自动注入
1.面向切面编程 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程叫做面向切面编程 2.常用概念 原有功能:切点,pointcut 前置通知:在切点之前执行的功能,befor ...
随机推荐
- vue项目中实现sql编辑器功能自定义高亮词汇可提示关键词-codemirror
先上图:左侧是数据库表,右侧上部是sql编辑器,下部是执行sql的返回接口 HTML: <el-row> <el-col :span="4" class=&quo ...
- 面试题-python 什么是闭包(closure)?
前言 前面学了装饰器,那么闭包和装饰器有什么区别呢?闭包传递的是变量,而装饰器传递的是函数对象,只是传的参数内容不一样,闭包的概念包含了装饰器,可以说装饰器是闭包的一种,它只是传递函数对象的闭包. 先 ...
- idea快捷键Ctrl+alt+m:如何快速抽离部分方法
Ctrl+alt+m 效果如下图
- RPA处理京东滑块拼图验证码
在进行京东商家后台企业账号的RPA自动化操作过程中,登录环节是必不可少的步骤.然而,这一过程中有时会遇到一种特殊的验证机制--滑块拼图验证码,它的突然出现如同一道屏障,阻碍了自动化的顺利进行.因为只有 ...
- SemanticKernel/C#:检索增强生成(RAG)简易实践
检索增强生成(RAG)是什么? RAG是"Reference-based Generative model with Attention"的缩写,也可以被称为"Retri ...
- ByteHouse高性能向量检索实践——“以图搜图”
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着 LLM 技术的发展,向量检索与向量数据库也受到业界持续关注,它们能够为LLM提供外置记忆单元,通过提供与 ...
- 2、SpringBoot2之入门案例
2.1.创建Maven工程 2.1.1.创建空项目 2.1.2.设置项目名称和路径 2.1.3.设置项目sdk 2.1.4.项目初始状态 注意:需要关闭项目再重新打开,才能看到SpringBoot-P ...
- SmolLM: 一个超快速、超高性能的小模型集合
简介 本文将介绍 SmolLM.它集合了一系列最尖端的 135M.360M.1.7B 参数量的小模型,这些模型均在一个全新的高质量数据集上训练.本文将介绍数据整理.模型评测.使用方法等相关过程. 引言 ...
- 国内的开源AI模型共享网站(AI模型的GitHub)—— modeldscope —— 对标外网的“huggingface”,modelscope好用吗?
搞AI的应该都是知道huggingface是啥的,这里不过多介绍,简单的来说就是AI模型的Github,之所以这么说是因为计算机的项目往往都是代码文件,所有计算机项目的Github只需要上传项目的代码 ...
- .NET静态代码编织——肉夹馍(Rougamo)4.0
肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件.相比动态代理AOP需要在应用启动时进行初始化,编译时完成代码编织的肉夹馍减少 ...