spring aop原理

Spring AOP功能实现 一、AOP的基本概念: 1、什么是aop:AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层. 阅读详情

🍅 Java学习路线:搬砖工逆袭Java架构师

🍅 简介:Java领域优质创作者🏆、优快云哪吒公众号作者✌ 、Java架构师奋斗者💪

🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

🍅 欢迎点赞 👍 收藏 ⭐留言 📝  

最近进行了一波面试,面试官问我项目中AOP的具体应用,面试的时候我只知道AOP是面向切面编程,动态代理方式实现的,可以用在登录验证、事务和日志上,但具体代码怎么写的,说的那真的是云里雾里,回家猛补了一下AOP。

一、AOP的基本概念

1、什么是AOP?

AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。

在不改变原有逻辑的基础上,增加了一些额外的功能。代理也是这个功能,读写分离也是用AOP来实现的。

2、AOP与OOP

AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

3、AOP

AOP技术恰恰相反,它利用一种称为“切面”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用的模块,并将其命名为“Aspect”,即切面。所谓“切面”,简单说就是那些与业务无关,却被业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多出,而各处基本相似,比如权限认证、日志、事务。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

二、AOP的相关概念

1、横切关注点

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点;

2、Aspect(切面)

通常是一个类,里面可以定义切入点和通知。

3、JoinPoint(连接点)

程序执行过程中明确的点,一般是方法的调用,被拦截到的点。因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。

4、Advice(通知)

AOP在特定的切入点上执行的增强处理,有before(前置)、after(后置)、afterReturning(最终)、afterThrowing(异常)、around(环绕)。

5、Pointcut(切入点)

带有通知的连接点,在程序中主要体现在书写切入点表达式。

6、weave(织入)

将切面应用到目标对象并导致代理对象创建的过程。

7、introduction(引入)

在不修改代码的前提下,引入可以在运行期为类动态地增加一些方法或字段。

8、AOP代理(AOP Proxy)

AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。

9、目标对象(Target Object)

包含连接点的对象,也被称作被通知或被代理对象,POJO。

三、Advice通知类型介绍

1、@Before

在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可。

2、@After

在目标方法完成之后做增强,无论目标方法是否成功完成,@After可以指定一个切入点表达式。

3、@AfterReturning

在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式外,还可以指定一个返回值形参名returning,代表目标方法的返回值。

4、@AfterThrowing

主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式外,还可以指定一个throwing的返回值形参名,可以通过该形参名来访问目标方法中所抛出的异常对象。

5、@Around

环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务、日志等都是环绕通知,注意编程中的核心ProceedingJoinPoint。

四、AOP的使用场景

1、Authentication 权限

2、Caching 缓存

3、Context passing 内容传递

4、Error handling 错误处理

5、Lazy loading 懒加载

6、Debugging  调试

7、logging, tracing, profiling and monitoring 记录跟踪 优化 校准

8、Performance optimization 性能优化

9、Persistence  持久化

10、Resource pooling 资源池

11、Synchronization 同步

12、Transactions 事务

今天就先到这吧,以后回来重构!

前一篇: 如果当时这12道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-14)

后一篇:【全栈最全Java框架总结】SSH、SSM、Springboot

Spring——AOP原理及流程详解 基于5.3.9 版本的Spring源码,对AOP原理及流程详解,AOP是在Bean生成流程中什么位置介入处理的?各个通知方法又是怎么组装的?AOP真的只是动态代理这么简单吗? 阅读详情

相关推荐

Spring AOP工作原理

纲要1.概述1.1 谈谈AOP,谈谈代理什么是AOP?为什么使用AOP?什么时候或者什么场景使用AOP?AOP的运作原理?1.2 静态代理1.3 动态代理1.3.1 动态代理的几种实现方式2.SpringAOP和AspectJ2.1 AspectJ2.2 SpringAOP原理剖析参考文献 1.概述 1.1 谈谈AOP,谈谈代理 在编写正文前,我想聊聊什么是AOP?如果在分析一件事物前,没有明确这...

伊甸园 4622

Spring——Spring AOP原理

AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑.AOP是Spring提供的关键特性之一,本文深入剖析Spring AOP的原理。

庄小焱 3947

【微服务】深入解析spring aop原理

spring 是一个流行的 Java 企业应用程序开发框架,其中的 aop(面向切面编程)是 spring 框架中一个非常重要的概念。可以说在spring框架以及生态体系下,随处可见aop编程思想的运用,借助这一编程思想,在很多特殊的业务场景下,AOP的使用让编码变得易扩展、更优雅、更灵活,同时也能很好的解决通用的业务问题,提升开发效率。本文将详细介绍AOP的核心技术和底层实现原理。AOP,即面向切面编程,AOP是一种编程范式,用于在不修改原始代码的情况下向现有应用程序添加新功能。

m0_74823524的博客 1382

Spring框架系列之第三章 AOP

AOP前奏 提出问题 情景:数学计算器 1) 要求   ①执行加减乘除运算   ②日志:在程序执行期间追踪正在发生的活动   ③验证:希望计算器只能处理正数的运算 2) 常规实现 3) 问题   ①代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点。   ②代码分散: 以日志需求为例,只是为了满足这个单一需求,就不得不在多个模块(方法)里多次重复相同的日志代码。如果日志需求发生变化,必须修改所有模块。 动态代理 动态代理的原

qq_36595761的博客 693

Spring AOP —— 详解、实现原理、简单demo

AOP 就是面向切面的编程, 是一种思想,是对某一类事情的集中处理。

CYK_byte的博客 3525

【微服务】Spring Aop原理深入解析

spring原理深度解析

congge 1万+

Spring AOP的原理

/ 目标对象@Override// 前置通知System.out.println("[前置通知] 开始执行方法: " + method.getName());System.out.println("[前置通知] 参数: " + Arrays.toString(args));try {// 执行目标方法// 后置通知(正常返回)System.out.println("[后置通知] 方法执行成功,返回值: " + result);// 异常通知。

weixin_44609018的博客 1411

GEO优化内容营销策略:从规划到落地的全流程指南

GEO内容营销是通过地域化内容提升本地搜索排名、增加流量和转化率的策略。核心包括:构建本地用户画像,挖掘需求关键词;策划本地文化融合、案例研究等多样化内容;通过网站、社交媒体、本地KOL等渠道精准分发;优化本地关键词和视觉元素;监测数据并动态调整。案例显示,咖啡馆、工业企业和服装品牌通过本地化短视频、KOL合作及社群运营,显著提升了搜索排名、客流量和销售额。关键原则是内容本地化、精准分发、KOL合作、激励用户生成内容及数据驱动优化,实现高效本地市场渗透。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1330

Spring AOP原理

AOP原理 解析 <aop:aspectj-autoproxy /> 标签 入口 DefaultBeanDefinitionDocumentReader.parseBeanDefinitions() 1.解析自定义名称空间的标签 1.1.由 NamespaceHandlerResolver 根据 namespaceUri 获取具体的 NamespaceHandler 1.1.1.第一次...

flyingzc的博客 604

ADS 2024 Circuit Envelope 仿真:3步配置调制源,分析5G NR EVM与ACPR

本文详细介绍了ADS 2024 Circuit Envelope仿真技术在5G NR调制源配置与关键指标分析中的应用。通过3步配置调制源,工程师可以高效评估EVM与ACPR等关键指标,特别适用于功放设计中的非线性效应诊断。文章还提供了优化仿真设置和精确提取EVM、ACPR的实用方法,助力5G射频前端设计。

weixin_28559803的博客 384

大样本EEG公共数据集汇总

描述: OpenNeuro平台包含多个认知障碍相关的EEG数据集,例如针对轻度认知障碍(MCI)或阿尔茨海默病(AD)的研究。描述: 天普大学医院EEG语料库包含大量临床EEG记录,可通过元数据筛选出与认知障碍相关的片段(如诊断标签包含dementia或MCI)。描述: ADNI主要提供多模态神经影像数据(MRI/PET),但部分合作研究整合了EEG数据。样本量: 部分数据集包含100+被试(例如结合MRI与EEG的多模态数据)。样本量:30,000+ EEG记录(持续更新,全球最大临床EEG数据库)。

谁人打的太极拳的博客 1761

Spring AOP 原理

本文系统介绍了Spring AOP的核心原理与实现机制。主要内容包括:AContent分为基本概念 presses(切面、通知、切 twice等)、盆 and 股实现原理(基于JDK动态代理和CGLIB),以及核心组件如通知类型与执行顺序、切点表达式等。深入剖析了Spring AOP内部工作机制,包括配置解析过程和代理对象创建流程。同时探讨了高级特性如代理对象调用链和性能优化建议,并与AspectJ进行了对比。Spring AOP通过运行时动态代理实现横切关注点的织入,在功能性和性能之间取得了良好平衡,为S

weixin_49538406的博客 676

三相逆变器LCL滤波设计实战:从αβ转换到dq解耦控制的完整建模流程

本文详细解析了三相逆变器LCL滤波设计中的关键步骤,从αβ转换到dq解耦控制的完整建模流程。重点介绍了dq坐标系下的解耦控制策略,通过Simulink仿真验证模型准确性,并提供谐振峰偏移、解耦不彻底等实际问题的解决方案,助力电力电子工程师提升系统稳定性。

weixin_28678151的博客 229

Spring AOP的原理是什么

Aspect

u012534547的博客 1205

华为MetaERP国资委语境下的 DRP(全域数字化资源管理平台/Digitalized Resource-management Platform)与传统 ERP(以 SAP、Oracle 为代表)的

【摘要】国资委推动的DRP(全域数字化资源管理平台)正在重构央国企数智化转型路径,其本质是通过"ERP管交易+DRP管管控"的双层架构实现升维替代。与传统ERP相比,DRP具有三大突破:采用国产分布式数据库实现全级次穿透监管、构建数据中台打破信息孤岛、以实时分析替代事后报表。当前政策明确2026-2030年分阶段建设目标,这将重塑产业格局——倒逼传统ERP厂商转型,为云原生/AI/信创企业创造新机遇。需注意DRP并非简单替代ERP,而是通过治理模式变革实现"交易系统做薄、管控中

金牌架构师 286

第1章第11节:创建可容纳多行滚动文字的输入框TextEditor [SwiftUI快速入门到实战]

TextField可以让用户输入单行的文字内容,若想输入多行的文字内容,可以使用能够容纳多行滚动文字的 TextEditor。 定义一个字符串属性,用来存储用户输入的文字内容。接着定义一个布尔属性,用来标识是否弹出警告窗口,以显示用户输入的内容。 TextEditor是由UIKit中的UITextView演变而来,因此可以在init方法中,通过UITextView修改TextEditor的外观属性。 添加一个VStack视图,作为子视图的容器。 创建一个TextEditor,Te..

互动教程网[www.hdjc8.com] 832

【Spring】Spring AOP原理

前言代理模式静态代理优缺点动态代理JDK动态代理工作原理JDK动态原理实现关键步骤CGLib动态代理 CGLIB动态代理实现关键步骤总结在上一篇中,我们讲解了什么是AOP,以及Spring AOP是如何使用的,那么本篇我们就来学习一下Spring AOP的原理,也就是Spring是如何实现AOP的。Spring AOP是基于动态代理来实现AOP的,什么是动态代理呢?动态代理其实是一种代理模式。代理模式,又可以称为委托模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直

zhyhgx的博客 1350

YOLO26改进策略【Neck】| CVPR2025 LCA轻量交叉注意力 跨层级双向引导 + 分层降噪增强,提升微小目标特征表达

简单相加、拼接融合无法建立深浅层双向约束关系,浅层微小目标易被深层背景覆盖,深层全局信息难以修正浅层噪声;普通单路自注意力仅单一层内建模依赖,缺少跨层级特征互引导机制,深浅特征信息割裂;标准多头跨注意力计算量大、参数量高,轻量化单模态检测/分割网络部署困难,无法区分前景目标与背景噪声。为此设计单模态轻量化交叉注意力LCA,构建浅层细节、深层语义双分支双向引导结构,轻量完成跨层级特征交互,同步降噪并强化单模态微小目标特征。

Limiiiing的博客 523

Spring AOP实现原理

本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。

m13299531475的博客 1191

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3674

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring AOP的实现原理

Spring AOP的底层实现原理及详细介绍以及适配器和常用通知的使用

weixin_74268571的博客 3757

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring AOP的工作原理和实现方式

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

A_aspectJ的博客 2201

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: FTP上传文件,报“系统错误”
下一篇: 如果当时这12道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-14)
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2953原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值