Spring Aop学习与理解

关于 SAP UI5 应用 url 中的特殊符号 # 的作用介绍 符号在 SAP UI5 的 URL 中不仅仅是一个分隔符,更是动态路由、状态管理和深链接的关键所在。通过合理使用,开发者可以实现高效、流畅的用户体验,同时保持系统的可维护性和扩展性。通过 SAP UI5 提供的灵活路由机制,企业应用可以轻松实现复杂导航需求,同时为用户提供直观的交互体验。 阅读详情

前言:讲真的,Spring aop对于我这样的菜鸟来说,理解就是面向切面编程,作用就是解耦和,实现多用于日志,安全事务,深一点的理解完全被各种术语搞得懵懵的,但是不懂还是要学,看了几篇博客发现大神真的多,在此感谢分享
1.术语
1.通知(Advice)

就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下。
2.连接点(JoinPoint)

这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前后后(抛出异常),都是连接点。
3.切入点(Pointcut)

上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
4.切面(Aspect)

切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
5.引入(introduction)

允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
6.目标(target)

引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。
7.代理(proxy)

怎么实现整套aop机制的,都是通过代理,这个一会给细说。
8.织入(weaving)

把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时,为什么是运行时,后面解释。

关键就是:切点定义了哪些连接点会得到通知
4.大神眼中的aop原理:https://blog.youkuaiyun.com/qukaiwei/article/details/50367761

spring用代理类包裹切面,把他们织入到Spring管理的bean中。也就是说代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。

现在可以自己想一想,怎么搞出来这个伪装类,才不会被调用者发现(过JVM的检查,JAVA是强类型检查,哪里都要检查类型)。

1.实现和目标类相同的接口,我也实现和你一样的接口,反正上层都是接口级别的调用,这样我就伪装成了和目标类一样的类(实现了同一接口,咱是兄弟了),也就逃过了类型检查,到java运行期的时候,利用多态的后期绑定(所以spring采用运行时),伪装类(代理类)就变成了接口的真正实现,而他里面包裹了真实的那个目标类,最后实现具体功能的还是目标类,只不过伪装类在之前干了点事情(写日志,安全检查,事物等)。

这就好比,一个人让你办件事,每次这个时候,你弟弟就会先出来,当然他分不出来了,以为是你,你这个弟弟虽然办不了这事,但是他知道你能办,所以就答应下来了,并且收了点礼物(写日志),收完礼物了,给把事给人家办了啊,所以你弟弟又找你这个哥哥来了,最后把这是办了的还是你自己。但是你自己并不知道你弟弟已经收礼物了,你只是专心把这件事情做好。

顺着这个思路想,要是本身这个类就没实现一个接口呢,你怎么伪装我,我就压根没有机会让你搞出这个双胞胎的弟弟,那么就用第2种代理方式,创建一个目标类的子类,生个儿子,让儿子伪装我

2.生成子类调用,这次用子类来做为伪装类,当然这样也能逃过JVM的强类型检查,我继承的吗,当然查不出来了,子类重写了目标类的所有方法,当然在这些重写的方法中,不仅实现了目标类的功能,还在这些功能之前,实现了一些其他的(写日志,安全检查,事物等)。

这次的对比就是,儿子先从爸爸那把本事都学会了,所有人都找儿子办事情,但是儿子每次办和爸爸同样的事之前,都要收点小礼物(写日志),然后才去办真正的事。当然爸爸是不知道儿子这么干的了。这里就有件事情要说,某些本事是爸爸独有的(final的),儿子学不了,学不了就办不了这件事,办不了这个事情,自然就不能收人家礼了。

前一种兄弟模式,spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。

后一种父子模式,spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。

相比之下,还是兄弟模式好些,他能更好的实现松耦合,尤其在今天都高喊着面向接口编程的情况下,父子模式只是在没有实现接口的时候,也能织入通知,应当做一种例外。

医疗数据采集:Python爬虫爬取医学文献与药品信息(2026合规与伦理版) 医疗数据采集不同于爬取新闻或房价,它直接关系到人的生命健康和法律底线。技术层面:优先使用官方 API (PubMed E-utilities, BioThings),避免解析复杂HTML。法律层面:严守“不碰隐私、不破付费、不传谣言”三条红线。伦理层面:保持对生命的敬畏,确保数据的准确性和用途的正当性。在2026年,一个优秀的医疗数据工程师,不是那个能爬取最多数据的人,而是那个能在合规框架下,利用公开数据解决真实医疗问题的人。请务必珍视您的职业生涯和法律责任,切勿以身试法。 阅读详情

相关推荐

手把手教你用STM32F103的IO口模拟XY2-100协议驱动数字振镜(附Keil O3优化代码)

本文详细介绍了如何使用STM32F103的IO口模拟XY2-100协议驱动数字振镜,包括协议解析、偶校验算法、寄存器级优化及Keil O3编译下的性能调优。通过硬件配置、核心代码实现和优化技巧,帮助开发者实现高速二维偏转控制,适用于工业激光雕刻和精密定位系统。

weixin_42527401的博客 261

Spring AOP:什么是AOP? 为什么要用AOP?如何学习AOP?

面向切面编程,它是⼀种思想,它是对某⼀类事情的集中处理。比如用户登录权限的校验,没有 AOP 之前,我们在所有需要判断用户登录的页面都进行调用用户验证的方法,而有了 AOP 之后,我们只需在一处配置好 AOP 规则,需要判断用户登录页面(还要接口)全部可以实现自主的登录验证,不再需要每次调用验证登录的方法,不但解决了每次调用验证方法的问题,还降低了代码的耦合性

努力 917

DP83848以太网PHY芯片:自动协商与MII/RMII接口实战解析

以太网物理层(PHY)芯片是嵌入式网络通信的核心,负责数字信号与模拟信号的转换,其稳定性和兼容性直接影响系统性能。其工作原理基于IEEE标准,通过管理接口(MDC/MDIO)配置内部寄存器,实现链路速率、双工模式等关键参数的设定。这项技术的核心价值在于为工业控制、汽车电子等严苛环境提供可靠、自适应的网络连接。在实际应用中,PHY芯片通过自动协商(Auto-Negotiation)功能与对端设备智能匹配最佳通信模式,极大提升了产品的易用性。同时,其支持的MII与RMII接口为硬件设计提供了灵活性,前者是标准并

weixin_29189987的博客 374

Spring学习——IOC和AOP的理解

IOC容器: 控制反转:将应用中的对象全部交由Spring的Bean工厂进行生成、装配与生命周期的管理;负责JavaBean的实例化,依赖关系的装配及高效的生命周期管理。 依赖注入:是指程序在运行期,由外部容器动态地将依赖对象注入到组件中。 应用本身不再负责依赖对象的创建和维护,依赖对象的创建及维护交由外部容器负责。 AOP:面向切面编程将业务逻辑中到处重复出现的一些诸如:日志输出、事务控制及权限

jtchen0401的博客 464

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7216

Halcon实战:5分钟搞定自定义直线卡尺工具(附完整代码下载)

本文详细介绍了如何使用Halcon快速开发自定义直线卡尺工具,通过交互式ROI绘制、边缘检测和直线拟合三个核心函数,实现高效工业视觉检测。文章包含完整代码下载,帮助开发者在5分钟内掌握这一实用工具的开发技巧,提升直线检测的精度和效率。

perl8的博客 250

Spring AOP学习理解

前言 aop(Aspect Oriented Programming)也就是面向切面编程,是对于面向对象编程(OOP,全文Object Oriented Programming)的补充和完善,因为oop允许开发者定义纵向关系,并不适合定义横向的关系,比如记录日志,这些代码会横散在对象里,而这些代码与业务逻辑并无关系,在传统oop思想下这些代码重复性比较高,造成代码冗余。 AOP核心概念 1...

sh279900945的博客 177

Spring学习——AOP的理解

概述 AOP(Aspect Oriented Programming)面向切面编程,指在程序运行期间,将某段代码动态的切入到指定方法的指定位置(方法的开始、结束、异常等)进行运行的这种编程方式。其中,动态代理可以实现AOP,但动态代理的缺点: 较为复杂,书写困难 若目标对象没有实现任何接口, jdk默认的动态代理无法为其创建代理对象 通过Spring实现的AOP功能,其底层就是动态代理,其优点: 简便的创建动态代理; 实现简单,而且没有强制要求目标对象必须实现接口; 将某段代码(日志)动态的切入(不

m0_38140207的博客 450

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1219

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2167

Spring学习理解之-Aop

多看多听多学多写才能掌握

qq_24792035的博客 251

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring5框架深入学习理解AOP

Spring5框架深入学习理解AOP 关于作者 作者介绍 ???? 博客主页:作者主页 ???? 简介:JAVA领域优质创作者????、一名在校大三学生????、在校期间参加各种省赛、国赛,斩获一系列荣誉???? ???? 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿????‍???? 文章目录Spring5框架深入学习理解AOP关于作者11、AOP11.1 简单了解下什么是AOP11.2 AOP在Spring中的作用11.3 Aop代码实现第一种方式

Java厂长 699

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring框架学习总结:AOP的理解

AOP(面向切面编程) 是Spring最为重要的一个功能,对AOP的解释有很多,官方的解释是:AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可...

Java鱼仔的博客 417

spring框架:AOP的初步理解学习

1、什么是AOP呢? AOP的全称是 Aspect-OrientedProgramming,即中文翻译里的面向切面编程。那么什么是面向切面编程,稍后来讲。先回顾一下OOP编程,即面向对象编程,这个我们很熟悉了它是按照纵向顺序来执行的,而AOP则是按照横向执行的。即它是OOP的一个补充。 (来自:https://www.cnblogs.com/zhaozihan/p/5953063.html) ...

qq_41833394的博客 401

Spring 学习之IOC,AOP,DI的理解

什么是IOC,AOP,DI?控制反转,面向切面编程,依赖注入

登哥你莫惹 285

Spring AOP 的理解学习

Spring AOP

weixin_44534544的博客 289

【Spring学习笔记 七】深入理解Spring AOP实现机制

AOP是什么,正如我标题所言,AOP是一种编程范式,同OOP一样,只是给出一种范式,具体的实现方式有多种多样,这一点需要明确,可以理解为一种思想模型和实现规范。本篇Blog讨论了基于动态代理的几种AOP的Spring的实现方式,包括原生动态代理方式、XML配置方式、注解方式,对于AOP来说还是注解方式用起来流畅一些,至此,Sping的两大核心思想IOC以及AOP都有了一个详细的认知了,有了AOP大多数通用操作都能被轻而易举的实现了。

MaoLin Tian's Blog 1231

Spring AOP的全面理解(学习Spring怎么也躲不掉的AOP)--Spring面向切面编程

概述 学习Spring无非学习Ioc(控制反转)和AOP(面向切面)两大核心功能,因为Ioc是Spring的精华,大家接触的多了也就对Ioc很熟悉了(主要也是因为Ioc比较好理解和容易使用)。不知道别人怎么样,我是每次学习AOP时候总是跳着看,觉得总是看不明白,可学习Spring永远躲不过AOP的掌握,前面章节刚把Java的动态代理理解透(传送门:Java动态代理的彻底理解(Java高级特性-...

小流至江河的博客 590

学习AOP之透过Spring的Ioc理解Advisor

本文转自:点击打开链接 花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍。那看书有什么用呢?主要还是扩展视野,毕竟书是别人总结出来的东西,看一遍可以发现自己的理解偏差,而且还可以看到一些平时不太关注的内容,当然看也可以是一种学习技术的方式。 最开始只是想了解一下A

zhuyucheng123的专栏 764

Spring AOP 学习的好例子 仔细理解一定能学会的!

先了解AOP的相关术语: 1.通知(Advice):通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。2.连接点(Joinpoint):程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。3.切入点(Pointcut)通知...

chunbo1110的博客 190

spring学习3-AOP理解

1.理解 ①AOP是面向切面编程,也就是面向对象编程的补充,面向对象是一切都 是对象。所谓切面就是功能(体现在程序上就是方法) 比如:小孩和老人都学习,这个学习就是一个功能(方法)提出来作为一个切面,然后注入到不同的对象里面中。(日志或者事务等功能) ②面向对象的编程是从静态角度考虑程序结构,而面向切面的编程是从动态角度考虑程序运行(AOP底层是动态代理(例如一个代理经纪人帮很多演员签合同)...

展信佳,当你看到这段简介的时候,我“风吹海洋浪”已走马上任优快云博客平台。我来这只办一件事:致力于将模糊的概念清晰化,技术的语言通俗化,复杂的关系逻辑化,孤岛的知识碎片结构化,让我一心和技术大佬们共同进步,最重要的是!!!!!忘记【你】 239

Spring AOP理解及原理(学习笔记2)

1.什么是aop 2.spring AOP原理 3.spring AOP源码略析

weixin_36885480的博客 186

spring学习笔记(三)我对AOP理解

首先我们要知道AOP是什么?AOP全称Aspect OrientedProgramming,即面向切面编程。在这里我不想去说什么是切面,什么是切点,什么是通知等等,相关博客很多,如果大家想知道可以自己去查,这里我希望用图像加代码方式将这些抽象的概念具体化给读者,给自己也捋一捋思路。 我们结合代码用图像一起说明,先看代码如下: // 假设我们现在有一个Person类,其中有一个eat的方法 p...

做一个认真的程序员 368

Spring学习(十三)aop技术理解与使用

什么是AOP?aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想。AOP底层也是面向对象;只不过面向的不是普通的Object对象,而是特殊的AOP对象。AOP的关注点是组成系统的非核心通用服务模块(比如登录检查等),相对于普通对象,aop不需要通过继承、方法调用的方式来提供功能,只需要在xml文件中以引用的方式,将非核心服务功能引用

FFA(Frighting for Ambition!) 3759
上一篇: mysql视图语句解析
下一篇: springboot+mabatis plus
javaXingzhe
博客等级 码龄8年 3145粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值