Spring Boot--02--自动装配原理

发布时间:2026/9/10 21:40:13

Spring Boot--02--自动装配原理 SpringBoot项目启动过程分析找到项目的入口类使用了SpringBootApplication注解描述然后运行启动类检测启动过程SpringBoot在启动时控制台会出现上图标识SpringBoot 项目在启动时首先基于启动入口类上的(SpringBootApplication)注解描述进行自动配置并扫描指定包以及子包中的类进行加载然后检测类上是否有Spring框架中指定的注解描述例如Component,Controller,Service 等。假如有则将类交给Spring框架中的BeanFactory工厂接口的实现类对象此工厂对象会基于反射创建Bean的实例假如此Bean指定了生命周期方法还会调用生命周期方法。当实例创建以后Spring框架还会基于类的作用域描述将实例存储到不同作用域的容器中。以实现Bean对象的科学应用。Spring框架管理Bean对象的优势Spring 是一个资源整合框架Framework,通过spring可将很多资源(自己写的对象或第三方提供的对象例如连接池等)整合在一起,然后进行科学应用以便更好的对外提供服务。懒加载策略Lazy(true) 默认为true作用域Scope(“singleton”) 默认单例生命周期方法lifecycle method PostConstruct PreDestroySpring框架可以为由它管理的对象Bean提供懒加载策略对象暂时用不到则无需加载和实例化作用域例如singleton-频繁用时可以考虑内存中只有一份,prototype-使用次数少时可以用时创建不用时销毁生命周期方法更好实现对象的初始化和资源销毁以实现对象对系统资源的有效使用。同时Spring框架还可以基于用户设计管理对象与对象的依赖关系以降低对象与对象之间的直接耦合提高程序的可维护性和可扩展性。Autowired 注入 has aAutowired由spring框架定义用于描述类中属性或相关方法。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用Autowired注解描述的属性或方法可以按照指定规则为属性赋值(DI)。其基本规则是首先要检测容器中是否有与属性或方法参数类型相匹配的对象假如有并且只有一个则直接注入。其次假如检测到有多个还会按照Autowired描述的属性或方法参数名查找是否有名字匹配的对象有则直接注入没有则抛出异常。最后假如我们有明确要求必须要注入类型为指定类型名字为指定名字的对象还可以使用Qualifier注解对其属性或参数进行描述(此注解必须配合Autowired注解使用)。什么是bean在Spring框架中由Spring创建和管理的对象的对象称之为Bean对象。我们在java中会把满足一定规范的java对象叫做bean对象。规范如下1必须是public的类2必须具备无参数构造方法3有公开的get set方法4必须是可序列化在序列化方式改进之后这个规范不是必须的Serializable可序列化接口是一个标识接口。序列化的概念把java对象拆分成一个一个的字节单元便于存储到磁盘或者用于网络传输。反序列化就是把一个一个的字节单元读取回来组成一个java对象。在早期Java要想实现序列化只能通过java原生的序列化方式也就是通过实现序列化接口来实现序列化。但是后来随着java的发展衍生很多的第三方序列化jar包。他们的序列化性能比原生的更好而且不需要实现序列化也可以序列化。SpringBoot特性: 开箱即用引入少量(不引用)的配置,则可以实现项目的整合及使用.1.元注解说明:Target(ElementType.TYPE) 对哪个元素有效 对类有效Retention(RetentionPolicy.RUNTIME) 什么时候起作用 运行期有效Documented 是否支持生成文档Inherited 该注解是否可以被继承.2 SpringBootConfiguration说明作用:标识主启动类是一个大型的配置文件,启动时会加载所有的小的配置文件.Configuration: 表示该类是一个配置类.3 excludeFilters 说明说明: 在springboot容器启动时,不需要加载某些过滤器.由于parent标签中定义了所有的关联的jar包文件信息.则启动时有可能导致意外的发生,所有需要提前剔除.4 AutoConfigurationPackage说明: 当程序启动时,会根据主启动类的包路径,扫描其子孙包,所以springboot以后写代码时应该在其子孙包下编辑.5 AutoConfigurationImportSelector说明:该配置中内部集成了所有的SpringBoot中的选择器.这些选择器的主要的任务就是查看是否有自己选择器所管理的启动项的配置. 如果发现该启动项,那么选择器就会执行该启动项,从而实现了开箱即用的操作.自动装配原理启动类上注解的作用SpringApplication.run方法-----相当于 SpringIoC的启动SpringBootApplication这个注解是springboot启动类上的一个注解是一个组合注解也就是由其他注解组合起来它的主要作用就是标记说明这个类是springboot的主配置类springboot应该运行这个类里面的main()方法来启动程序会看到SpringBootApplication这个注解由好多注解组成主要的有以下三个SpringBootConfigurationEnableAutoConfigurationComponentScanComponentScan这个注解的作用主要作用就是扫描当前包及子包的注解标识了需要装配的类标识需要装配的类的形式主要是Component、Repository、Service、Controller这类的注解标识的类。这个扫描的范围是SpringBoot主启动类的同级路径及子路径扫描到特定的Component、Service、Controler、Repository、Configuration等等注解后会做相应的bean注册和配置文件bean注册工作。SpringBootConfiguration这个注解包含了ConfigurationConfiguration里面又包含了一个Component注解也就是说这个注解标注在哪个类上就表示当前这个类是一个配置类而配置类也是spring容器中的组件EnableAutoConfigurationAutoConfigurationPackageImportAutoConfigurationImportSelector.classAutoConfigurationPackage这个注解的作用说白了就是将主配置类SpringBootApplication标注的类所在包以及子包里面的所有组件扫描并加载到spring的容器中这也就是为什么我们在利用springboot进行开发的时候无论是Controller还是Service的路径都是与主配置类同级或者次级的原因Import(AutoConfigurationImportSelector.class)上一个注解我们把所有组件都加载到了容器里面这个注解就是将需要自动装配的类以全类名的方式返回那是怎么找到哪些是需要自动装配的类呢1、AutoConfigurationImportSelector这个类里面有一个方法selectImports()如下2、在selectImport()方法里调用了一个getAutoConfigurationEntry()方法这个方法里面又调用了一个getCandidateConfigurations()方法3、在getCandidateConfigurations()方法里面调用了loadFactoryNames()方法5、关键就在这个loadSpringFactories()方法里面在这个方法里它会查找所有在META-INF路径下的spring.factories文件 6、在META-INF/spring.factories这个文件里面的数据是以键值的方式存储然后解析这些文件找出以EnableAutoConfiguration为键的所有值以列表的方式返回自动装配本质SpringApplication.run方法-----相当于 SpringIoC的启动起来SpringBoot自动装配的本质就是通过Spring去读取META-INF/spring.factories中保存的配置类文件并生成相应的Bean对象然后将它们交给spring容器来帮我们进行管理如何实现 “自动”通过配置文件获取对应的批量配置类然后通过配置类批量加载bean定义只要有写好的配置文件spring.factories就实现了自动。
延伸阅读

更多相关文章

2026/9/5 19:18:11

LyricsX:让你的macOS音乐体验拥有智能歌词同步功能

LyricsX:让你的macOS音乐体验拥有智能歌词同步功能 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 你是否在寻找一款能够完美配合你日常听歌习惯的歌词工具?Lyric…

2026/9/10 21:39:28

Telethon媒体处理性能:优化处理速度

Telethon媒体处理性能:优化处理速度 你是否在使用Telethon处理媒体文件时遇到过速度慢的问题?是否想知道如何优化下载和上传性能?本文将从技术细节出发,为你提供实用的优化方案,让你的Telethon媒体处理效率提升300%。…

2026/9/10 21:34:27

CANN/ge离线图编译执行示例

Sample Usage Guide 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Tensor…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码