【简说八股】面试官:你知道什么是AOP么?
回答
AOP(Aspect-Oriented Programming),即面向切面编程,是一种编程范式,它的主要思想是将应用程序中的横切关注点(如日志记录、性能统计、安全控制等)从业务逻辑中剥离出来,然后通过特殊的方式将这些横切关注点与业务逻辑进行关联,从而实现了这些功能的模块化和重用。
在传统的面向对象编程中,我们常常会在业务逻辑代码中夹杂着一些公共的功能,比如日志记录、事务管理等。而使用AOP,则可以将这些公共功能抽取成独立的“切面”,然后通过特定的方式将这些切面与业务逻辑进行关联。这样一来,业务逻辑代码就可以更专注于核心的业务功能,而公共功能则可以通过切面的方式进行统一管理和维护。
Spring框架提供了强大的AOP支持,可以通过配置和注解等方式来定义切面和切点,从而实现对业务逻辑的横切关注点进行统一管理和处理。这样,开发者可以更专注于业务逻辑的开发,而不必过多地关注公共功能的实现和维护,大大提高了代码的可维护性和灵活性。
Spring AOP中的各种概念和术语
| 术语 | 翻译 | 释义 |
|---|---|---|
| Aspect | 切面 | 切面由切入点和通知组成,包含横切逻辑的定义和切入点的定义,可以包含不同增强方法,如事务处理和日志处理。 |
| PointCut | 切入点 | 对连接点进行拦截的条件定义,决定通知应该作用于哪些方法。 |
| Advice | 通知 | 通过切入点拦截后,在连接点执行的具体行为,即切面的具体行为。 |
| Target | 目标对象 | 将要被增强的对象,包含主业务逻辑的类对象,或被一个或多个切面所通知的对象。 |
| JoinPoint | 连接点 | 程序在运行时的执行点,可以是正在执行的方法或正在抛出的异常,Spring中连接点是被拦截到的方法。连接点由方法和相对点两部分信息确定。 |
| Weaving | 织入 | 将切面和业务逻辑对象连接起来,创建通知代理的过程。织入可以在编译时、类加载时、运行时完成,静态代理和动态代理都属于织入的方式。 |
| Before Advice | 前置通知 | 在连接点执行前执行的逻辑。 |
| After returning advice | 返回通知 | 连接点正常执行(未抛出异常)后执行的逻辑。 |
| After throwing advice | 异常通知 | 连接点抛出异常后执行的逻辑。 |
| After finally advice | 最终通知 | 无论连接点是否正常执行或抛出异常,在连接点执行完毕后执行的逻辑。 |
| Around advice | 环绕通知 | 非常灵活地在方法调用前后执行特定逻辑的通知类型。 |
典型应用场景
Spring AOP的典型应用场景包括:
- 日志记录:记录方法执行时间、参数和返回值。
- 事务管理:在方法执行前后开启和提交/回滚事务。
- 安全检查:在方法执行前进行权限验证。
- 性能监控:统计方法的执行时间。
相关文章:
【简说八股】面试官:你知道什么是AOP么?
回答 AOP(Aspect-Oriented Programming),即面向切面编程,是一种编程范式,它的主要思想是将应用程序中的横切关注点(如日志记录、性能统计、安全控制等)从业务逻辑中剥离出来,然后通过特殊的方式将这些横切…...
ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载
ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号: FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接:https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码:0d46 原厂系统自带所有驱动、…...
Unity(第二十一部)动画的基础了解(感觉不了解其实也行)
1、动画组件老的是Animations 动画视频Play Automatically 是否自动播放Animate Physics 驱动方式,勾选后是物理驱动Culling Type 剔除方式 默认总是动画化就会一直执行下去,第二个是基于渲染播放(离开镜头后不执行), …...
写时复制简介
写时复制技术(Copy on Write)是比较常用的一种技术,它的主要目的是延迟减少以及延迟内存的分配,增加执行效率,只有在真正进行写操作的过程中才会真正分配物理资源。同时,也可以保护数据在系统崩溃时出现的丢失。比如,我…...
运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)
如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的,我们可以在py文件中的第一行加入以下代码: # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式: utf-…...
行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)
以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意: ①only a…...
leetcode-字符串中的单词数
434. 字符串中的单词数 题解: 这个问题可以通过遍历字符串,当遇到非空格字符时,判断其前一个字符是否为空格,如果是,则说明这是一个新的单词的开始,计数器加一。最后返回计数器的值即可。 class Solutio…...
一些C语言题目
求10个整数中最大值 #include <stdio.h>//求10个整数中最大值 int main() {int arr[10]{2,5,8,6,19,1,7,3,11,3};int i 0;int max 0;/*for(i 0;i < 10;i){scanf("%d",&arr[i]);}*/for(i 0;i < 10;i){if(arr[i] > max)max arr[i];}printf(&q…...
JVM相关问题
JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的?二、JVM类加载的双亲委派模型?三、JDK为什么要设计双亲委派模型,有什么好处?四、可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?五、什么是内…...
32单片机基础:旋转编码器计次
接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断,当然,这里只初始化一个外部中断也能完成功能的对于编码器而言,下图所示为正转的波形。如果把一相的下降沿用作触发中断,在中断时刻读取另一相的电平,正…...
【C++】vector的使用和模拟实现(超级详解!!!!)
文章目录 前言1.vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.3 vector 增删查改1.2.4 vector 迭代器失效问题。(重点!!!!!!)1.2.5 vector 在OJ中有关的练习题 2.ve…...
GO学习记录
这里写目录标题 00 环境01 语言基础二级目录三级目录 00 环境 参考的:https://www.liwenzhou.com/posts/Go/install/ 编译运行: go mod init <项目名> // 在目录下创建项目 go mod init <项目名> // 编译go run <文件名>.go …...
迭代器模式(Iterator Pattern)
定义 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问聚合对象中的各个元素,而不需要暴露该对象的内部表示。迭代器模式使得客户端代码能够独立于聚合对象的具体实现进行遍历操作。 在迭代器模式…...
KL divergence(KL 散度)详解
本文用一种浅显易懂的方式说明KL散度。 参考资料 KL散度本质上是比较两个分布的相似程度。 现在给出2个简单的离散分布,称为分布1和分布2. 分布1有3个样本, 其中A的概率为50%, B的概率为40%,C的概率为10% 分布2也有3个样本: 其…...
AzerothCore@FreeBSD安装记录
尝试在FreeBSD系统下安装AzerothCore 首先安装相关软件 pkg install cmake mysql80-server boost-all装完mysql之后提示: MySQL80 has a default /usr/local/etc/mysql/my.cnf, remember to replace it with your own or set mysql_optfile"$YOUR_CNF_FILE i…...
vue .env配置环境变量
最近使用的不同的环境有点多了,接口文件ip一直在替换打包,看了下文档,有个方案使用.env配置不同的环境运行打包 vue 现在已经兼容了env ,无需下载 创建文件(根目录) 创建.env.development,.env.…...
ThreadLocal介绍
文章目录 ThreadLocal源码分析:set方法get方法remove方法 ThreadLocal内存泄漏问题 ThreadLocal ThreadLocal提供了线程局部变量,每个线程都可以通过set和get方法来对这个变量进行操作,但不会和其他线程的局部变量冲突,实现了线程…...
【Linux系统化学习】线程概念
目录 线程的概念 线程的引出 什么是线程 理解线程比进程更加的轻量化 线程的优点 现成的缺点 线程异常 线程用途 Linux进程VS线程 线程的简单现象 线程的概念 有关操作系统的书籍或者课本都会这样描述线程: 线程是比进程轻量化的一种执行流线程是进程内部…...
Redis集群模式
分片 面试题:为什么Redis的最大槽位是16384? 翻译一下作者的话: 解读一下:...
执行go get xxx报错
1、执行命令 go get github.com/go-redis/redis/v8 报错 : go: coding.jd.com/xxx/xxxxxxv0.0.0-xxxxxxxxxx: invalid version: git ls-remote -q origin in /users/douhao7/go/pkg/mod/cache/vcs/xxxxxxxxxxxxxx: exit status 128: 致命错误:could not read use…...
8款热门数据治理工具深度测评,哪款功能最强大?
业务要报表,数据散在 ERP、CRM、Excel 十几个系统里,跨部门取数要等好几天。好不容易凑齐数据,财务和业务口径不一致,核心指标算出来两个数。数据越多越混乱,找数据比用数据难,这些问题都是因为数据治理没做…...
开源语音数据集全攻略:从技术架构到智能家居落地实践
开源语音数据集全攻略:从技术架构到智能家居落地实践 【免费下载链接】cv-dataset Metadata and versioning details for the Common Voice dataset 项目地址: https://gitcode.com/gh_mirrors/cv/cv-dataset 一、价值定位:重新定义语音数据获取…...
Mapshaper:免费开源地图数据编辑器的完整使用指南
Mapshaper:免费开源地图数据编辑器的完整使用指南 【免费下载链接】mapshaper Tools for editing Shapefile, GeoJSON, TopoJSON and CSV files 项目地址: https://gitcode.com/gh_mirrors/ma/mapshaper 还在为复杂的地理数据处理而烦恼吗?Mapsha…...
如何在Windows电脑上轻松安装安卓应用?APK Installer完整使用指南
如何在Windows电脑上轻松安装安卓应用?APK Installer完整使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为无法在电脑上运行手机应用而烦恼吗…...
Testsigma自动化测试平台深度解析:AI协同测试架构设计与实践指南
Testsigma自动化测试平台深度解析:AI协同测试架构设计与实践指南 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve qua…...
IC版图新手避坑:用Layout XL做Floorplan时,关闭飞线的正确姿势与常见误区
IC版图设计实战:Layout XL飞线管理的艺术与科学 在IC版图设计的世界里,飞线(Rubber Band)就像一把双刃剑——它既是连接关系的直观体现,也可能成为视觉干扰的源头。特别是当设计规模达到数万甚至数十万门级时ÿ…...
把 Predefined Field Enabling 接进 RAP 业务对象里,给你的 SaaS 应用留出真正可控的客户扩展位
很多做 ABAP Cloud 的同学,做到 RAP 业务对象这一层时,会把可扩展性理解成两条路,一条是开发者自己预留字段,一条是交给 Key User 在运行期做字段配置。真正有意思的地方,其实在两条路的交汇点上,开发者先把边界、元数据、校验规则和发布契约搭好,客户再在自己的租户里把…...
别再手动传文档了!Unity+Coze知识库自动上传与进度监控全攻略
UnityCoze知识库自动化上传与进度监控实战指南 在游戏开发中,剧情文本、设定文档等资源的管理往往需要频繁更新和版本控制。传统的手动上传方式不仅效率低下,还容易出错。本文将带你构建一个完整的自动化解决方案,实现从Unity到Coze知识库的…...
ChatTTS语音导航优化:车载系统更人性化播报
ChatTTS语音导航优化:车载系统更人性化播报 1. 引言:让车载导航真正"会说话" 你有没有遇到过这样的情况:开车时听着机械冰冷的导航语音,感觉像是在听机器人念经?"前方300米右转"、"请保持直…...
Intv_AI_MK11模型部署精讲:Anaconda环境管理与依赖隔离
Intv_AI_MK11模型部署精讲:Anaconda环境管理与依赖隔离 1. 为什么需要环境隔离 在部署AI模型时,最让人头疼的问题之一就是依赖冲突。你可能遇到过这样的情况:昨天还能正常运行的代码,今天安装一个新包后就报错了;或者…...
