第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)
大家好,我是网创有方,接下来教大家如何理解Spring的两个特性IOC和AOP。本节有点难,大家多理解。
IOC(控制反转) 定义与核心思想:
IOC,全称Inversion of Control,即控制反转。
其核心思想在于,资源的使用不由使用资源的各方管理,而是交给一个不直接使用资源的第三方进行管理。这样的好处是资源是集中管理的,可配置、易维护,同时也降低了双方的依赖度,实现了低耦合。
实现与优势: 在传统的编程方式中,如果一个类A需要使用类B,那么A会自己去创建B的实例。这会导致类A与类B之间的高耦合,维护成本较高。而在使用Spring的IOC容器后,类A不再直接创建类B的实例,而是由Spring容器来创建并管理这些实例。类A只需要从容器中获取类B的实例即可,从而降低了类A与类B之间的耦合度。 Spring容器通过配置文件或注解等方式来定义和管理Bean(即对象实例),使得对象的创建、配置和销毁等操作都交由Spring容器来管理。这样做的好处是代码更加清晰、易于维护,同时也提高了系统的可扩展性和可测试性。
AOP(面向切面编程) 定义与核心思想:
AOP,全称Aspect-Oriented Programming,即面向切面编程。它是一种编程范式,允许程序员将横切关注点(cross-cutting concerns)从他们所影响的业务逻辑中分离出来。这些横切关注点通常包括日志记录、事务管理、安全性等。通过AOP,我们可以将这些横切关注点封装成一个个切面(Aspect),然后在适当的时候将它们织入到业务逻辑中。
实现与优势: AOP的实现通常依赖于动态代理技术(如JDK动态代理或CGLIB)。在Spring中,当一个方法被调用时,Spring会检查该方法是否需要进行AOP处理(即是否匹配某个切面的切入点)。如果需要处理,则Spring会创建一个代理对象来拦截该方法的调用,并在方法调用前后执行切面的通知(Advice)。 AOP的优势在于它可以减少代码的冗余和复杂性。通过将横切关注点封装成切面,我们可以避免在多个业务逻辑中重复编写相同的代码(如日志记录、事务管理等)。同时,AOP也使得这些横切关注点更加易于管理和维护。 总结 IOC和AOP是Spring框架的两个核心特性。它们分别解决了对象之间的依赖关系管理和横切关注点的分离问题。通过使用IOC和AOP,我们可以降低代码的耦合度、提高代码的可维护性和可扩展性、减少代码的冗余和复杂性。
好了,上面是不是看着很难理解,接下来我简单归纳下。
第一:一个类被称作一个bean,传统方式创建一个类对象都是通过new对象实现,有了IOC这玩意之后,直接通过工厂factory创建好类了,统一管理。简单来说,就是你不要再通过new啊这种方式创建对象了,销毁创建都不用你来管,你直接丢给我工厂,我来帮管。
第二:AOP就是创建切入点,然后拦截,拦截处实现自己的逻辑。打个比方,早上上班本来坐公交,路上遇到了道路施工,然后改成骑自行车,就这个道理。
如果对Spring的源码感兴趣的可以去看看。

下面附上书中的BeanFactory获取bean的代码,下面代码非常简单。用的泛型,看不懂的自己回去补java基础。
package org.springframework.beans.factory;import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;public interface BeanFactory {String FACTORY_BEAN_PREFIX = "&";Object getBean(String name) throws BeansException;
//获取bean的几种方法<T> T getBean(String name, Class<T> requiredType) throws BeansException;Object getBean(String name, Object... args) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
//获取BeanProvider的几种方法<T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);boolean containsBean(String name);
//是否单例模式boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
//是否原型模式boolean isPrototype(String name) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;@NullableClass<?> getType(String name) throws NoSuchBeanDefinitionException;@NullableClass<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;String[] getAliases(String name);
}
参考:杨开振老师的《深入浅出Spring boot 3.x》
相关文章:
第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)
大家好,我是网创有方,接下来教大家如何理解Spring的两个特性IOC和AOP。本节有点难,大家多理解。 IOC(控制反转) 定义与核心思想: IOC,全称Inversion of Control,即控制反转。 其核…...
【51单片机】串口通信(发送与接收)
文章目录 前言串口通信简介串口通信的原理串口通信的作用串口编程的一些概念仿真图如何使用串口初始化串口串口模式波特率配置 发送与接收发送接收 示例代码 总结 前言 在嵌入式系统的开发中,串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用…...
【AI研发工具包】sklearn教程(Scikit-learn)
目录 1. 引言 2. 安装sklearn 3. 导入sklearn 4. 加载数据集 5. 数据预处理 6. 训练模型 7. 评估模型 8. 保存和加载模型 9. 自定义数据 10. 深入sklearn 11. 注意事项 1. 引言 Scikit-learn(简称sklearn)是Python中一个非常流行的机器学习库…...
数位DP——AcWing 1081. 度的数量
数位DP 定义 数位DP是一种动态规划技巧,特别适用于处理与数字的位操作相关的问题,如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑,从而简化问题复杂度,实现高效求解。 数位DP的核心思想是将原…...
2024下半年必追国漫片单,谁将问鼎巅峰?
随着2024年上半年的落幕,国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP,从玄幻到科幻,每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作,大胆预测,谁将成为这场神仙打架…...
信息发布小程序h5 uniapp thinkphp
纯手工uniapp thinkphp 全开源打造 信息发布小程序 一、概述 信息发布小程序是一种基于微信平台的小程序应用,旨在为用户提供便捷的信息发布与展示服务。用户可以通过该小程序快速发布各类信息,如招聘、寻物、公告等,同时也可以浏览和搜索…...
Windows定时任务执行脚本
场景:由于网络波动原因导致云数据库没连接上,从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了,网络恢复后 数据库链接正常,但是该引擎服务还是中止状态。 解决方案:在Windows中新建一个定时任务&#…...
优维“统一开放平台”:开放、开发、集成、客制化
基于丰富完善的产品体系,优维重磅推出了统一开放平台。这款由优维自主设计与研发,集数据开发、能力开放、能力集成、客制化为一体的统一开放平台,具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块,可为…...
ChatGPT新纪元:揭秘GPT-4o的多模态能力
GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨,OpenAI向全球宣布了AI发展的新篇章——GPT-4o,每次OpenAI发布重大更新时,尽管令人兴奋,但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…...
泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift
NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …...
(四)SvelteKit教程:调用外部 API 获取数据
(四)SvelteKit教程:调用 API 我们先按照如下的方式来构建api服务: step 1:npm i json-serverstep 2:在根目录下新建 db.json 文件,内部写入如下内容:{"users": [{"id": 1,"name…...
数据结构-分析期末选择题考点(排序)
何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样,我将整理一下排序的题型以及解题方法给你们 由于时间还很多,我就慢慢总结吧,一天一章的样子,明天总结串、后天…...
Python:探索高效、智能的指纹识别技术(简单易懂)
目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp 编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…...
『SD』AI绘画,不会写提示词怎么办?
提示词 有没有想过,为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫,但猫与猫之间还是有差距的。 如果你的提示词只是“cat”,那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词ÿ…...
搭建大型分布式服务(四十二)SpringBoot 无代码侵入实现多Kafka数据源整合插件发布
系列文章目录 文章目录 系列文章目录前言MultiKafkaStarter [V2.2]一、功能特性二、快速开始(生产端)三、快速开始(消费端)四、其它特性五、变更记录六、参考文章 前言 在分布式服务的架构演进中,消息队列作为核心组件…...
Python 学习路线及技巧
一、学习路线 1. 基础阶段 ● 学习 Python 的语法基础,如变量、数据类型、运算符、控制流等。 ● 掌握常用的 Python 标准库,如 os、sys、re、datetime 等。 ● 通过编写简单的程序来巩固基础,如计算器、字符串处理等。 2. 进阶阶段 ● 深入…...
计算机网络知识整理笔记
目录 1.对网络协议的分层? 2.TCP/IP和UDP之间的区别? 3.建立TCP连接的三次握手? 4.断开TCP连接的四次挥手? 5.TCP协议如何保证可靠性传输? 6.什么是TCP的拥塞控制? 7.什么是HTTP协议? 8…...
练习 String翻转 注册处理 字符串统计
p493 将字符串中指定部分进行翻转 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…...
linux的常用系统维护命令
1.ps显示某个时间点的程序运行情况 -a :显示所有用户的进程 -u :显示用户名和启动时间 -x :显示 没有控制终端的进程 -e :显示所有进程,包括没有控制终端的进程 -l :长格式显示 -w :宽…...
java:aocache 0.4.0 缓存控制机制
aoocache发布第一个版本0.1.0时,没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时,同事提到这个需求,他希望能够有方法主动去清理指定方法的缓存: 他的数据是由其他服务启动时提供的,他的方法…...
果园灌溉施肥控制系统改造之西门子 S7 - 1200 PLC 实战
果园灌溉施肥控制系统改3 西门子s7-1200plc程序博途v16,带 选型表 io表接线图CAD和运行效果视频最近搞了个果园灌溉施肥控制系统的改造项目,用的是西门子 S7 - 1200 PLC,编程软件是博途 V16,这过程还挺有意思,跟大家…...
League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集
League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolki…...
这份榜单够用!盘点2026年用户挚爱的一键生成论文工具
一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的一键生成论文工具,覆盖选题构思、文献综述、数据整理、格式排版等核心场景,高效搞定论文不再只是梦想。 一、全流程王者:一站式搞定论文全链路(一…...
5分钟精通:开源内容解锁工具Bypass Paywalls Clean完全指南
5分钟精通:开源内容解锁工具Bypass Paywalls Clean完全指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,学术文献、专业报道和深度分…...
避开这3个坑!用Solidworks链阵列做皮带挡板时90%人会犯的错误
避开这3个坑!用Solidworks链阵列做皮带挡板时90%人会犯的错误 在机械设计领域,Solidworks的链阵列功能是创建皮带挡板这类重复性结构的利器。但看似简单的操作背后,却隐藏着几个容易导致失败的陷阱。很多中级用户在使用链阵列功能时ÿ…...
从Kinect到奥比中光:为什么我的深度学习项目选了Gemini 2L?附Python SDK踩坑实录
从Kinect到奥比中光:为什么我的深度学习项目选了Gemini 2L?附Python SDK踩坑实录 深度视觉技术正在重塑人机交互的边界。当我的团队启动一个需要实时三维重建的农业机器人项目时,我们面临着一个关键抉择:在众多深度相机品牌中&…...
Axure RP 10实战:3分钟搞定Tab切换效果(附交互样式设置技巧)
Axure RP 10高级Tab切换效果:从基础实现到专业级交互设计 在当今快节奏的数字化产品设计领域,Tab切换作为最常见的用户界面元素之一,其交互体验的优劣直接影响用户对产品的第一印象。Axure RP 10作为行业领先的原型设计工具,提供了…...
OpenMemories-Tweak完整指南:如何安全解锁索尼相机的隐藏功能
OpenMemories-Tweak完整指南:如何安全解锁索尼相机的隐藏功能 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak OpenMemories-Tweak是一款专为索尼相机设计的开源解…...
保姆级教程:在NUC12Pro上配置Ego_planner无人机自主飞行系统(含D435i与Pixhawk 6C)
在NUC12Pro上构建Ego_planner无人机自主飞行系统的全流程指南 当硬件堆满工作台时,最令人兴奋的莫过于将它们组装成一个能自主思考的飞行系统。本文将带您完成从零搭建基于NUC12Pro、D435i深度相机和Pixhawk 6C飞控的完整解决方案,重点解决那些官方文档从…...
自动驾驶之心实习生招募|上海线下,一起做点真东西
点击下方卡片,关注“自动驾驶之心”公众号 戳我-> 领取自动驾驶近30个方向学习路线 自动驾驶之心是业内头部的垂类自媒体平台,过去一年,我们梳理了端到端、VLA、世界模型、强化学习等前沿方向的最新进展,也分享了行业概况、融资…...
