发布时间:2026/7/26 19:10:47
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/7/26 19:10:47

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

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

2026/7/27 1:31:19

Java开发者本地部署Qwen 3.5大模型实战指南

1. 项目概述 作为一名长期奋战在Java开发一线的工程师,我深知Java开发者在AI浪潮中的尴尬处境。每当想要尝试大模型应用,铺天盖地的Python教程总让人望而却步。直到我发现OllamaSpring Boot这套组合拳,终于让Java开发者也能轻松玩转本地大模…

2026/7/27 1:31:19

AI宠物健康管理平台:技术与应用解析

1. AI宠宝平台概述:当宠物健康管理遇上人工智能作为一名养了十年金毛的资深铲屎官,我深知宠物健康管理的痛点。每次带狗子去宠物医院做基础体检,不仅耗时费力,动辄几百元的费用也让人肉疼。更糟心的是,当狗狗半夜出现皮…

2026/7/27 1:31:19

Agent Harness:构建持续智能应用的核心技术解析

1. 从裸引擎到赛车:Agent Harness的诞生背景2026年的AI领域正在经历一场静悄悄的革命。当我们把GPT-4.5这样的模型比作"最强大脑"时,往往会忽略一个残酷的事实:这个大脑被装在一个连金鱼都不如的记忆系统里。每次对话重置&#xff…

2026/7/27 1:31:19

多模态AI模型架构设计与工程实践

1. 统一多模态基础模型:从概念到实践在人工智能领域,我们正见证着一场深刻的范式转变——从单一模态、单一任务的专用模型,向能够同时处理多种模态(文本、图像、音频、视频等)并兼具理解与生成能力的统一基础模型演进。…

2026/7/27 1:31:19

大模型部署优化:异构GPU管理与推理效率提升实践

1. 大模型部署的关键挑战与优化实践上周六在北京举办的SGLang Meetup上,来自GPUStack、OpenBMB和SGLang社区的技术专家们围绕大模型部署中的核心痛点展开了一场深度讨论。作为AI基础设施领域的从业者,我想把这次活动中的精华内容整理成文,分享…

2026/7/26 0:03:36

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/27 0:01:12

xcku5p-ffvb676-2-i 设计 RoCEv2 时 constraints.xdc 配置依据核查记录

constraints.xdc 配置依据核查记录 被核查文件:fpga/vitis/xcku5p/build/constraints/constraints.xdc 目标板卡:RK-XCKU5P-F V1.2(搭载 xcku5p-ffvb676-2-i) 移植母本:fpga/pynq/rfsoc-pynq/build/constraints/constraints.xdc(NVIDIA Holoscan Sensor Bridge 参考工程)…

2026/7/27 0:01:12

TMS320C54x DSP内存映射与I/O模拟配置实战指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是DSP这类资源受限、架构独特的处理器上,内存映射配置和I/O模拟是每个开发者都必须跨越的一道坎。这不仅仅是调试器里的几个菜单选项或命令行参数,它直接关系到你的程序能否在目标板上正确运行、能…

2026/7/26 2:45:59

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…