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代理):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/450748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CUDA入门之统一内存

原文来自CUDA 编程入门之统一内存 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质…

X64 页表结构

PML4(Page Map Level 4)是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构,由多个页目录表(Page Directory Pointer Table,PDPT)组成,每个PDPT有512个指向下一级页表…

低功耗DC-DC电压调整器IU5528D

IU5528D是一款超微小型,超低功耗,高效率,升降压一体DC-DC调整器。适用于双节,三节干电池或者单节锂电池的应用场景。可以有效的延长电池的使用时间。IU5528D由电流模PWM控制环路,误差放大器,比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳…

1_springboot_shiro_jwt_多端认证鉴权_Shiro入门

1. Shiro简介 Shiro 是 Java 的一个安全框架,它相对比较简单。主要特性: Authentication(认证):用户身份识别,通常被称为用户“登录”,即 “你是谁”Authorization(授权&#xff…

webpack-dev-server5.0+ 版本问题

webpack-dev-server版本选择 在使用webpack-dev-server搭建新项目时,需要依赖node 和webpack以及webpack-cli 这是需要注意各个应用之间的版本问题 通过npm官网查看webpack-dev-server使用的版本依赖对象 先看package.json,可以看到当前的版本 再找到依…

YOLOv9使用训练好的权重检测目标

打开yolov9-main\detect.py文件 1修改为训练后权重文件的位置 2改为要检测图片的位置 3修改成数据集的yaml文件 运行detect.py文件并解决报错 打开报错文件yolov9-main\utils\general.py,在prediction = prediction[0]后边加上[0] 继续运行detect.py,成功检测 存在问题 当…

9个免费游戏后端平台

在这篇文章中,您将看到 九个免费的游戏服务平台提供商,这可以帮助您开始在线多人游戏,而无需预先投入大量资金。 每个提供商都有非常独特的功能,因此成本应该只是决定时要考虑的方面之一。 我还从低预算项目的角度对免费提供商进…

如何在Ubuntu系统部署DbGate数据库管理工具并结合cpolar内网穿透远程访问

文章目录 1. 安装Docker2. 使用Docker拉取DbGate镜像3. 创建并启动DbGate容器4. 本地连接测试5. 公网远程访问本地DbGate容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Linux Ubuntu系统中使用Docker部署DbGate数据库管理工…

WordPress供求插件API文档:获取市场类型

请注意,该文档为: WordPress供求插件:一款专注于同城生活信息发布的插件-CSDN博客文章浏览阅读396次,点赞6次,收藏5次。WordPress供求插件:sliver-urban-life 是一款专注于提供同城生活信息发布与查看的插件…

CSS伪类与常用标签属性整理与块级、行级、行级块标签(文本,背景,列表,透明,display)

目录 文本 color:字体颜色 font-size:字体大小​编辑 front-family:字体 text-align:文本对齐 text-decoration:line-through:定义穿过文本下的一条线 text-decoration:underline:定义文本下的一条线…

mysqld.exe运行时,提示缺少msvcr100.dll,msvcp100.dll文件,导致mysql安装失败或mysql服务无法启动

mysqld.exe运行时,提示缺少msvcr100.dll,msvcp100.dll文件,导致mysql安装失败或无法启动 msvcr100.dll,msvcp100.dll时VC2010的动态链接库。 1、下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id26999&wd…

027—pandas 不同分类每天指定取值的比例

前言 本例我们将进行分组计算,分组后得到一个堆叠数据,并对堆叠数据解除堆叠,最后再按要求格式化为百分数样式。 此类操作会经常发生在业务数据透视场景下,一般都会有 Excel 来操作完成,今天我们使用 Python 的 panda…

钉钉扫码登录,sdk问题

别问我为啥会写这玩意。因为有人问到了 1.钉钉扫码登录,网上代码一大堆,但是小同学在抄的时候突然问我,为啥jar包倒入不了。pom添加了,镜像也是阿里的,还是不行 下载了包,按这个放啊发去操作就好了 1.先…

1.Datax数据同步之Windows下,mysql数据同步至另一个mysql数据库

目录 前言步骤操作大纲步骤明细其他问题 前言 Datax是什么? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。准备…

Hand 3D相关

看到一个不错的文献总结网址,如下 GitHub - SeanChenxy/Hand3DResearch 涉及的内容如下图:

基于SSM框架的民族文化传承与乡村扶贫网站设计与实现【附项目源码】分享

民族文化传承与乡村扶贫网站设计与开发: 源码地址:https://download.csdn.net/download/qq_41810183/88842794 一、引言 随着信息技术的飞速发展,互联网已成为文化传播与经济发展的重要平台。为了有效传承和弘扬民族文化,同时推动乡村地区…

【Linux】Shell编程【一】

shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…

Docker上部署LPG(loki+promtail+grafana)踩坑复盘

Docker上部署LPG(lokipromtailgrafana)踩坑复盘 声明网上配置部署踩坑多机采集 声明 参考掘金文章:https://juejin.cn/post/7008424451704356872 版本高的用docker compose命令,版本低的用docker-compose 按照文章描述&#xff0c…

应急响应-Webshell-典型处置案例

网站后台登录页面被篡改 事件背景 在2018年11月29日4时47分,某网站管理员发现网站后台登录页面被篡改,“中招”服务器为windows系统,应采用java语言开发,所使用的中间件为Tomcat。 事件处置 Webshell排查 利用D盾对网站目录进…

C++_包装器

目录 1、包装器的用法 2、包装器的类型 3、包装器的作用 4、包装成员函数 5、bind(绑定) 5.1 bind的用法 5.2 bind减少参数个数 结语 前言: C11的包装器,总称为function包装器,而包装器又称适配器…