Spring AOP常见面试题
目录
一、对于AOP的理解
二、Spring是如何实现AOP的
1、execution表达式
2、@annotation
3、基于Spring API,通过xml配置的方式。
4、基于代理实现
三、Spring AOP的实现原理
四、Spring是如何选择使用哪种动态代理
1、Spring Framework
2、Spring Boot
五、基于Spring Boot观察动态代理
1、类实现接口且未配置
2、类未实现接口且未配置
3、类实现接口且配置
4、类未实现接口且配置
一、对于AOP的理解
AOP是一种思想,是对一类事情集中处理。比如:对于一个项目中的不同方法,想计算每个方法运行消耗时间,若在每个方法体里实现一遍计算时间,代码不断重复。此时,我们就可以利用AOP思想集中计算时间。
二、Spring是如何实现AOP的
Spring实现AOP有两种实现方式:execution表达式和@annotation
1、execution表达式

例如:execution(public String com.example.demo.Controller.testController())
2、@annotation
(1)实现步骤
①编写自定义注解;
②使用@annotation表达式来描述切点表达式;
③在连接点的方法上加上自定义注解。
3、基于Spring API,通过xml配置的方式。
4、基于代理实现
三、Spring AOP的实现原理
Spring AOP是基于动态代理实现的,常见的实现方式:JDK动态代理和CGLIB动态代理。
四、Spring是如何选择使用哪种动态代理
1、Spring Framework
如果代理的是接口,使用JDK动态代理。如果代理的是没有实现接口的类,使用CGLIB动态代理。
2、Spring Boot
(1)Spring Boot 2.x之前
和Spring Framework保持一致;代理的是接口,使用JDK动态代理;代理的是没有实现接口的类,使用CGLIB动态代理。
(2)Spring Boot 2.x之后
无论类是否实现接口,默认使用CGLIB动态代理。需要使用CGLIB代理时,可以通过配置项进行修改:spring.aop.proxy-target-class=false,若类实现了接口且至少有一个方法实现,则使用JDK动态代理,否则使用CGLIB动态代理。
五、基于Spring Boot观察动态代理
1、类实现接口且未配置


运行结果(CGLIB代理):
![]()
2、类未实现接口且未配置


运行结果(CGLIB代理):

3、类实现接口且配置
配置:

![]()
运行结果(JDK代理):

4、类未实现接口且配置
配置:


运行结果(CGLIB代理):

相关文章:
Spring AOP常见面试题
目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API,通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…...
Java学习笔记14——常量与变量
曾和儿子分享过所谓计算机程序,都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用,数据都必须以某种方式表示。掌握变量和常量的用法,可以使代码的可维护性、可读性大大提高。 一、常量 常量就是在程序中固定不变的量…...
代码随想录算法训练营第四十四天 | 卡码网52. 携带研究材料 ,LeetCode 518. 零钱兑换 II , 377. 组合总和 Ⅳ
题目链接:52. 携带研究材料(第七期模拟笔试) (kamacoder.com) #include<bits/stdc.h> using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,v;cin>>n>>v;vector<int> dp(v1,…...
Android Kotlin知识汇总(四)Kotlin 协程实践
Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式,可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理,例如网络调用、本地数据访问等任务的管理。 简单来说,协程就是一种轻量级的非…...
python基础篇--学习记录2
1.深浅拷贝 l1 ["张大仙","徐凤年",["李淳刚","邓太阿"]] # 变量名对应的就是内存地址,这里就是将l1的内存地址给了l2 # 现在两个变量指向同一个内存地址,l1变化l2也会变化 l2 l1 现在的需求是l2是l1的拷贝版本,但是两者是完全分割…...
自动化运维工具Ansible
一.Ansible基本内容 1.定义 Ansible是基于模块工作的,只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。 2.特点与优势 优势&…...
VR全景在智慧园区中的应用
VR全景如今以及广泛的应用于生产制造业、零售、展厅、房产等领域,如今720云VR全景更是在智慧园区的建设中,以其独特的优势,发挥着越来越重要的作用。VR全景作为打造智慧园区的重要角色和呈现方式已经受到了越来越多智慧园区企业的选择和应用。…...
用信号的方式回收僵尸进程
当子进程退出后,会给父进程发送一个17号SIGCHLD信号,父进程接收到17号信号后,进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后,这是切回到父进程,此时父进程只会处理一个17号信号,其他…...
计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程
科技的发展带动了企业生产,越来越多的企业开始利用计算机服务器办公,为企业的生产运营提供了极大便利,但随之而来的网络安全威胁也引起了众多企业的关注。近日,云天数据恢复中心接到许多企业的求助,企业的计算机服务器…...
【C语言刷题】——初识位操作符
【C语言刷题】——初识位操作符 位操作符介绍题一、 不创建临时变量(第三个变量),实现两个数的交换(1)法一(2)法二 题二、 求一个数存储在内存中的二进制中“一”的个数(1࿰…...
Python 对Excel工作表中的数据进行排序
在Excel中,排序是整理数据的一种重要方式,它可以让你更好地理解数据,并为进一步的分析和报告做好准备。本文将介绍如何使用第三方库Spire.XLS for Python通过Python来对Excel中的数据进行排序。包含以下三种排序方法示例: 按数值…...
Python对头发二维建模(考虑风力、重力)
目录 一、背景 二、代码 一、背景 数值方法被用于创建电影、游戏或其他媒体中的计算机图形。例如,生成“逼真”的烟雾、水或爆炸等动画。本文内容是对头发的模拟,要求考虑重力、风力的影响。 假设: 1、人的头部是一个半径为10厘米的球体。…...
Python基础快速入门
Python基础快速入门 前置知识 Python Python是一种广泛使用的高级编程语言,以其易于学习和使用的语法而闻名。以下是Python的一些主要特点: 高级语言:Python是一种高级语言,这意味着它提供了较高层次的抽象,使编程更…...
C++的学习
代码练习 输入一个字符串,统计其中大写字母、小写字母、数字、空格以及其他字符的个数 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串" << endl;string str;getline(cin,str);int capital 0;int l…...
工地安全反光衣穿戴监测报警摄像机
工地安全反光衣穿戴监测报警摄像机是为了提高工地施工人员的安全意识和监管效率而设计的。这种设备结合了反光衣、监测系统和报警摄像机的功能,可以有效减少工地事故的发生。 首先,工地安全反光衣是一种具有高度可见度的服装,能够使穿戴者在夜…...
UNIAPP微信小程序中使用Base64编解码原理分析和算法实现
为何要加上UNIAPP及微信小程序,可能是想让检索的翻围更广把。😇 Base64的JS原生编解码在uni的JS引擎中并不能直接使用,因此需要手写一个原生的Base64编解码器。正好项目中遇到此问题,需要通过URLLink进行小程序跳转并携带Base64参…...
人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)
1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法,属于聚类(clustering)算法的一种,是应用最广泛的聚类算法之一。所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,…...
注意力、自注意力和多头注意力的区别
本文作者: slience_me 注意力、自注意力和多头注意力的区别 理解注意力(Attention)、自注意力(Self-Attention)和多头注意力(Multi-Head Attention)之间的区别非常重要,因为它们是自…...
FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明
文章目录 简介FTPFTPSSFTP加密场景选择FTPS还是SFTPFTP、SFTP、FTPS区别、联系和具体使用场景如何使用FTP、SFTP和FTPSSSLTLSSSL和TLS区别和联系,以及使用场景SSL和TLS技术上的区别一些问题隐式的TLS(FTPS/SSL)或者显式的TLS(FTPS…...
路由算法与路由协议
路由选择协议的核心是路由算法,即需要何种算法来获得路由表中的各个项目。 路由算法的目的很简单:给定一组路由器以及连接路由器的链路,路由算法要找到一条从源路由器到目标路由器的最佳路径。通常,最佳路径是指具有最低费用的路…...
终极指南:如何用Obsidian PDF++插件将PDF阅读效率提升300%
终极指南:如何用Obsidian PDF插件将PDF阅读效率提升300% 【免费下载链接】obsidian-pdf-plus PDF: the most Obsidian-native PDF annotation & viewing tool ever. Comes with optional Vim keybindings. 项目地址: https://gitcode.com/gh_mirrors/ob/obsid…...
失业期PHP程序员,能合作就别对着干。多一个朋友,少一个敌人。
这句话是失业期 PHP 程序员在资源匮乏环境下,从“零和博弈”转向“正和博弈”的生存智慧。 它的本质是:承认个体力量的局限性,通过降低人际摩擦系数,将潜在的竞争对手转化为互补的合作伙伴。在失业期,你的核心资产不是…...
40 ns 10 MHz:一颗中国“芯”凭TMR技术交出高频电流传感新答案
当第三代半导体将电力电子系统的开关频率推至MHz时代,电流检测环节却成了整个系统的“速度瓶颈”,行业亟待一场感知革命。安徽希磁科技股份有限公司(以下简称“希磁科技”)最新发布的STK-636TMF芯片级电流传感器,以40纳…...
OpenClaw技能库怎么用?从获取、下载到添加使用一篇讲清
OpenClaw技能库怎么用?从获取、下载到添加使用一篇讲清 关键词:openclaw技能库、OpenClaw技能库、OpenClaw Skill、OpenClaw教程、AI智能体、EasyClaw 摘要 很多人开始接触 OpenClaw 后,真正卡住的往往不是“听不懂概念”,而是…...
HWA_04 LeetCode 150、逆波兰表达式求值
题目解题思路 class Solution:def evalRPN(self, tokens: List[str]) -> int:stack []for token in tokens:try:stack.append(int(token))except:num2stack.pop()num1stack.pop()stack.append(self.evluate(num1,num2,token))return stack[0]def evluate(self,num1,num2,op)…...
OpenClaw学习记录:Phi-3-mini-128k-instruct自动生成Anki记忆卡片
OpenClaw学习记录:Phi-3-mini-128k-instruct自动生成Anki记忆卡片 1. 为什么需要自动化记忆卡片 备考过程中最痛苦的经历莫过于整理海量笔记后,还要手动制作Anki记忆卡片。去年准备技术认证考试时,我花了整整两周时间把300多页PDF的精华内容…...
6G八大核心关键技术汇总
6G的关键技术围绕 “极致速率、全域覆盖、智能原生、通感算智融合” 四大目标展开,是5G技术的全面革新与颠覆。以下是当前业界公认、研发最集中的八大核心技术。一、太赫兹(THz)通信 —— 超高速“高速公路”核心作用:解决5G带宽瓶…...
OpenClaw硬件控制:Qwen3.5-9B通过串口操作物联网设备
OpenClaw硬件控制:Qwen3.5-9B通过串口操作物联网设备 1. 为什么选择OpenClaw控制物联网设备 去年我在搭建智能温室种植系统时,遇到了一个典型问题:市面上的物联网中台要么价格昂贵,要么灵活性不足。作为一个喜欢折腾的开发者&am…...
3步掌握Adobe-GenP:开源工具助力创意工作流效率提升
3步掌握Adobe-GenP:开源工具助力创意工作流效率提升 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在数字创意领域,Adobe Creative Cloud套…...
Verdi 快速上手:信号追踪与波形调试实战
1. Verdi工具入门:数字IC调试的瑞士军刀 刚接触数字IC设计时,最让我头疼的就是仿真波形调试。密密麻麻的信号线像一团乱麻,根本不知道从哪里下手。直到同事推荐了Verdi,这个被业界称为"调试神器"的工具彻底改变了我的工…...
