SpringBoot的自动加载源码分析

SpringBoot的自动加载举例。
使用HttpEncodingAutoConfiguration举例

我们从/Users/apple/Documents/Work/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.1.9.RELEASE/spring-boot-autoconfigure-2.1.9.RELEASE.jar!/META-INF/spring.factories文件中的HttpEncodingAutoConfiguration开始分析。

/**
 * @Configuration注解的作用有2个。
 * 1、表明这是一个配置类
 * 2、可以给容器中添加组件,类似@Service等Ioc注解的作用
 * 这里表明这个类是一个配置类,而且吧配置类注入到Spring容器中
 */
@Configuration
/**
 * @EnableConfigurationProperties注解的作用
 * 1、启用ConfigurationProperties功能。具体到这里就是启用HttpProperties
 * 2、吧HttpProperties.class也注入到了Spring的容器中(实现了JavaBean与yaml配置文件属性的关联)
 */
@EnableConfigurationProperties(HttpProperties.class)
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
/**
 * @ConditionOnXxx类注解的作用
 * 1、均表示根据一定的条件来决定是否注入到Spring容器中,这些Condition是前提,只有这些满足,才会创建HttpEncodingAutoConfiguration。
 */
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {

HttpProperties是否会被Spring创建,取决于有没有@EnableConfigurationProperties来关联启用它。

/**
 * @ConfigurationProperties注解的作用
 * 1、用来进行属性绑定的。
 * 这里是:HttpProperties类的属性就被绑定到了以spring.http开头的配置文件中(如yaml文件)
 * 备注:
 *    这个类是否会被注入到Spring容器中,取决与有没有@EnableConfigurationProperties来让它启用。
 */
@ConfigurationProperties(prefix = "spring.http")
public class HttpProperties {

以上的分析解决了HttpProperties最终会根据一定的条件是否创建的过程,但是并没有解决yaml文件配置的属性是怎么注入到了HttpProperties的问题。以下分析一下这个问题。

yaml文件与配置类HttpProperties的关联是通过@ConfigurationProperties注解的prefix来绑定的。看下图

@ConfigurationProperties(prefix = "acme", ignoreUnknownFields = true)
@Data
public class AcmeProperties {

    private  String username;
}
//application.yaml文件

acme:
  username: yuchangyuan

可以看到配置类的prefix="acme"与application.yaml的acme关联起来了,配置类的属性(这里是username)与yaml文件的username关联起来了。这里只是拿String类型的username属性举了例子,其他如List、Map、对象等都可以与yaml文件文件关联。具体可以参看下yaml的一些简单描述:
https://www.runoob.com/w3cnote/yaml-intro.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于构建独立的、可执行的、生产级的Spring应用程序。它提供了一个快速、简单的方式来开发和部署应用程序。而在Spring Boot的启动过程中,有以下几个主要的步骤: 1. 加载启动类:Spring Boot应用程序的启动类通常是一个带有`@SpringBootApplication`注解的Java类。在应用程序启动时,会通过`main`方法加载这个启动类。 2. 创建Spring Application对象:Spring Boot会创建一个`SpringApplication`对象,用于启动应用程序。`SpringApplication`是Spring Boot框架的核心类,它负责管理整个应用程序的生命周期。 3. 解析配置信息:在启动过程中,`SpringApplication`会解析`application.properties`或`application.yaml`文件中的配置信息,并将其加载Spring环境中。这些配置信息可以用来配置应用程序的各个方面,如数据库连接、日志级别等。 4. 创建并配置Spring容器:Spring Boot使用Spring容器来管理应用程序中的各个Bean。在启动过程中,`SpringApplication`会根据配置信息创建并配置一个Spring容器,该容器负责加载和管理应用程序中的所有Bean。 5. 执行自定义逻辑:在Spring Boot的启动过程中,可以添加自定义的逻辑。例如,可以通过实现`CommandLineRunner`接口来在应用程序启动后执行一些初始化操作。 6. 启动应用程序:完成上述步骤后,`SpringApplication`会启动应用程序,并通过Servlet容器(如Tomcat、Jetty等)监听端口,开始接收和处理HTTP请求。 总体而言,Spring Boot的启动流程是一个通过加载启动类、解析配置信息、创建和配置Spring容器的过程。通过Spring Boot自动配置和快速启动能力,开发者可以更加方便地构建和部署Spring应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值