什么是配置类
@configuration被这个注解所修饰的类,就是配置类
spi的扩展机制
什么是SPI
spi的全称是Service Provider Interfacce,是一种服务发现机制,通过meta-inf/service下的文件中的类路径来加载类。这一机制使得很多框架都可以基于spi进行扩展,比如dubbo、jdbc都使用到了spi机制
mata-inf/spring.factory
springboot启动类的注解
SpringBootApplication
ComponentScan
SpringbootAutoConfiguration
EnableAutoConfiguration
对springboot的理解、springboot的特性
springboot是应用框架 脚手架
springboot是用于快速开发spring应用的脚手架,设计的目的是为了简化我们搭建、开发Spring项目的过程
springboot提供了很多内置的start,无需配置,开箱即用
springboot内置了web容器,无需依赖外部web容器,直接启动jar就可以启动web容器
springboot自带了监控功能,可以监控程序的运行状况
springboot帮我们管理了第三方依赖的版本,避免冲突
springboot简化了各个组件的整合,引入start即可
自动配置类也是在spring的ioc加载过程中去解析的,并不是单独去解析的
springboot装配原理
通过注解,加载所有的web-inf/spring.factory文件 这是springboot留给第三方扩展的扩展点
去重 去掉不应加载的(读取web-inf/spring-autoconfigure-metadata.properties)根据配置过滤
x、启动类上添加注解@springBootApplication
x、内部包含另一个注解@EnableAutoConfiguration
x、内部包含注解@import(引入了)
x、spring容器启动时,加载ioc容器时会解析import注解
x、import注解导入selector
x、加载所有web-inf/spring.factory文件,文件中都是key-val的键值对,通过键找到所有值然后加载,键为autoConfigureClass
x、去重
x、去掉exlude需要排除的
x、根据autoconfigure中的加载条件OnClass或者OnBean选择是否加载(也可以在类中添加ONClass注解或者 OnBean注解)
根据条件注解排除
springboot启动过程有哪些步骤
x、加载启动类
x、启动类中的main方法会使用springApplication.run()
x、自动配置:在构建应用程序上下文的过程中,springboot会扫描类路径上的各种组件、配置文件和类,根据条件进行配置
x、加载外部属性:springboot会加载各种外部属性,application.yml
x、创建bean:创建IOC容器,使用IOC容器来管理应用程序中的各种bean的实例,会创建和管理这些bean,以供后续的组件使用
x、启动内嵌服务器 (默认tomcat,也可以使用jetty)
x、执行初始化和回调
x、应用程序运行:一旦应用程序上下文构建完成,web服务器启动并监听请求,等待客户端请求的到来
为什么sprinboot的jar可以直接运行 ?
内嵌了web服务器
可执行的jar
所需要的依赖都在这个可执行的jar中
springboot项目打包需要使用spring-boot-maven-plugin,他会将springboot项目打成jar包
这个jar包内部也包含了很多jar,都是当前应用依赖的jar
当执行java -jar时,会从jar包 中找到manifest文件,文件中有mainclass,通过这个mainclass来加载当前jar中的所有子jar
并以一个新线程来启动我们启动类中的main函数
Springboot内置tomcat启动原理
在refresh方法中创建并启动的
x、先引入依赖Spring-boot-Start-web,此时会启动内置的tomcat
x、在springboot启动的时候,就会创建spring容器,在spring容器加载的时候就会解析自动配置类,从而获得tomcat服务的工厂,通过getWebServer为我们创建一个tomcat,并且启动,此时tomcat就可以等待请求了
Spring核心注解
SpringBootApplication
SpringBootConfiguration
EnableAutoConfiguration
ConditionalOnxxx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)