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就实现了自动。
企业数字化 ERP 产品动态
相关推荐
[SDR] 两种方法可视化“打“飞机:ADS-B 信号接收与航班追踪 SDR 两种方法可视化"打"飞机:ADS-B 信号接收与航班追踪
引言:什么是ADS-B与SDR?ADS-B(Automatic Dependent Surveillance–Broadcast)是一种飞机自动广播自身位置、速度、高度等信息的通信协议。每架现代飞机… · 2026/11/3 0:43:29
Cursor Free VIP:智能绕过AI编辑器试用限制的终极解决方案 Cursor Free VIP:智能绕过AI编辑器试用限制的终极解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your… · 2026/11/3 0:52:31
Windows软件卸载残留问题深度解析与清理方案 1. 为什么软件卸载后还会留下残留?这个问题困扰过太多Windows用户了。明明已经通过控制面板卸载了软件,但C盘空间就是不见增长。更糟的是,有些软件甚至会在重新安装时自动读取这些残留配置,导致各种奇怪的问题反复出现。造成这种现… · 2026/11/3 19:57:51
企业健康申报系统设计与高并发优化实践 1. 项目背景与核心需求职工健康每日申报系统是近年来企事业单位健康管理的重要数字化工具。这套系统最初源于2020年特殊时期的企业防疫需求,如今已演变为常态化健康管理平台。以某制造企业(代号M193)为例,其拥有2000余名员工&… · 2026/11/4 14:16:23
Redis读写分离架构与Spring Boot整合实战 1. Redis读写分离架构解析Redis作为高性能键值数据库,在实际生产环境中经常会遇到读多写少的场景。我经历过一个电商项目,大促期间读请求量达到写请求的20倍以上,单节点Redis实例的CPU直接飙到100%。这时候就需要引入读写分离架构来分担主节点… · 2026/11/4 14:16:23
从Claude Code到Pi:AI Coding迁移潮与harness工程实践 1. 这场“迁移潮”到底在迁移什么 最近半年,AI Coding 圈子里一个越来越明显的现象是:不少原本重度使用 Claude Code 的开发者,开始把日常主力工具换成了 Pi。注意,这里说的“放弃”并不是说 Claude Code 一夜之间不能用了&#x… · 2026/11/4 14:16:23
无人船MPAPF路径规划:动态避障与实时决策技术 1. 无人船路径规划的技术挑战与创新方案在无人船自主航行领域,复杂动态环境下的路径规划一直是困扰工程师的核心难题。传统人工势场法(APF)虽然计算效率高,但在多障碍物场景容易陷入局部最优;而模型预测控制࿰… · 2026/11/4 14:16:23
Context即服务:AI时代的新基础设施 1. 入口战争早已结束:当搜索框、App图标和浏览器标签都开始“失语”我第一次意识到“入口”这个词正在失效,是在去年帮一家做智能客服SaaS的客户做架构复盘时。他们花了整整18个月、投入三支前端团队,把产品首页重做了7版——从瀑布流到卡片式… · 2026/11/4 14:16:23
AgentScope多智能体框架实战:消息驱动与工具调用避坑指南 1. 为什么我会盯上 AgentScope 这个多智能体框架第一次听到 AgentScope 这个名字,是在一个做智能客服系统的朋友那里。他当时吐槽说,用某几个主流框架搭多智能体协作,光是让两个 Agent 稳定对话就调了三天,消息传递、状态管理、工… · 2026/11/4 14:15:22
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38