Spring Boot原理篇
本文侧重📝记录SpringBoot3框架源码 官方文档 核心注解 理解SpringBoot源码的核心注解分别是组件注册注解、条件注解、属性绑定注解,这几个注解与SpringBoot的自动装配机制息息相关! 组件注册 组件注册是将对象存储到Spring boot的IoC容器中 @Component:将类作为组件注册到IoC容器中。 @ComponentScan 扫描指定路径下需要注册到容器中的组件。 @SpringBootApplication注解中默认将@SpringBootApplication所标注的类所在位置标注为扫描路径。 @Bean、@Scope:通常标注在方法上,将方法返回的对象注册到ioc容器中。 默认是单例(singleton) 通常用于导入第三方组件 可以通过@Scope来修改容器的作用域 singleton:单例模式(默认值),整个 Spring 容器中只创建一个 Bean 实例。 prototype:原型模式,每次获取 Bean 时都会创建一个新的实例。 request:每个 HTTP 请求创建一个 Bean,仅在 Web 应用中有效。 session:每个 HTTP Session 创建一个 Bean,仅在 Web 应用中有效。 @Import 通常用与将第三方组件导入到容器中 其他: 配置类组件注册注解:@Configuration、@SpringBootConfiguration。@Configuration = @Component, @SpringBootConfiguration = @Configuration + @Index Web开发类组件注册注解,@Controller、@Service、@Repository = @Component … 条件注解 @ConditionalOnXXX如果指定注解的条件成立,则触发指定行为,例子:@ConditionalOnClass, 如果类路径中存在这个类,则触发指定行为, 若将这个注解放在类级别,如果注解判断生效,则整个配置类生效 若放在方法级别,单独对这个方法进行注解判断 属性绑定 将容器中任意组件的属性值和配置文件的配置项的值进行绑定 @ConfigurationProperties、@EnableConfigurationProperties(常用于第三方组件的属性绑定,默认会把组件放到容器中) 绑定过程 给容器中注册组件(@Bean/@Component) 使用@ConfigurationProperties声明组件和配置文件的哪些配置项进行绑定 核心原理 启动过程 Listener从META-INF/spring.factories读到 引导:利用 BootstrapContext引导整个项目启动 starting: 应用开始,只要有了BootstrapContext就直接调用 prepareEnvironment: 配置环境变量,但是ioc还没创建 启动: contextPrepared: 创建ioc容器,但是sources(主配置类)还没加载。并关闭引导上下文。 contextLoaded:ioc容器加载。主配置类加载进去了。但是ioc容器还没刷新(我们的bean还没创建) started: ioc容器刷新了(所有的bean还没创建),但是runner没调用。 ready:ioc容器刷新了(所有的bean还没创建),而且runner调用完了。 运行: 以前步骤都正确执行,代表容器running 回调监听器 BootStrapRegistryInitializer:感知特定阶段:感知引导初始化 META-INF/spring....