首页>>后端>>SpringBoot->深入理解Spring Boot start组件实现原理

深入理解Spring Boot start组件实现原理

时间:2023-11-29 本站 点击:0

Spring Boot 自动配置原理

SpringBoot的优点这边不用多说,Springboot提供了一堆的starter,比如redis, kafka, nacos等等很多开源框架的启动器。使用起来非常方便。

Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。

spring-boot-starter-web-services - SOAP Web Services

spring-boot-starter-web - Web 和 RESTful 应用程序

spring-boot-starter-test - 单元测试和集成测试

spring-boot-starter-jdbc - 传统的 JDBC

spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能

spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权

spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA

spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务

等等。

Spring Boot 自动配置核心原理

三个核心注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass

@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。筛选有效的自动配置类。 每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

以Nacos配置为例

Spring Boot 配置加载顺序

在 Spring Boot 里面配置的加载方式

properties文件

YAML文件

系统环境变量

命令行参数 当然还有其他的加载方式,比如nacos动态配置等等。

Spring Beans 里面直接使用这些配置文件中加载的值,如:

使用 @Value 注解直接注入对应的值,这能获取到 Spring中Environment 的值

使用 @ConfigurationProperties 注解把对应的值绑定到一个对象 4.直接获取注入 Environment 进行获取;

配置属性的方式很多,Spring boot使用了一种独有的 PropertySource 可以很方便的覆盖属性的值。

配置属性加载的顺序如下:

开发者工具Devtools全局配置参数;

单元测试上的 @TestPropertySource 注解指定的参数

单元测试上的 @SpringBootTest 注解指定的参数

命令行指定的参数,如java -jar springboot.jar --name="Java技术栈"

命令行中的SPRING_APPLICATION_JSONJSON指定参数, 如java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar

ServletConfig初始化参数

ServletContext初始化参数;

JNDI参数(如java:comp/env/spring.application.json

Java系统参数(来源:System.getProperties());

操作系统环境变量参数;

RandomValuePropertySource随机数,仅匹配:ramdom.*

JAR包外面的配置文件参数(application-{profile}.properties(YAML)

JAR包里面的配置文件参数(application-{profile}.properties(YAML)

JAR包外面的配置文件参数(application.properties(YAML)

JAR包里面的配置文件参数(application.properties(YAML)

@Configuration配置文件上 @PropertySource 注解加载的参数;

默认参数(通过SpringApplication.setDefaultProperties指定);

数字小的优先级越高,即数字小的会覆盖数字大的参数值。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/387.html