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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fire Fish

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

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

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

打赏作者

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

抵扣说明:

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

余额充值