SpringBoot自动配置分析续

前言

        上一篇SpringBoot-2.1.3自动配置原理已经介绍了自动配置的大致过程,下面接着上篇的内容进一步介绍其过程,下面以HttpEncodingAutoConfiguration为例。
        根据前一篇讲的,当获取到配置项的数据,也就是各个xxxAutoConfiguration类的全路径之后将会在容器中创建对象,下面是HttpEncodingAutoConfiguration源码。

@Configuration 
@EnableConfigurationProperties({HttpProperties.class})
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({CharacterEncodingFilter.class})
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
	...
}
  • @Configuration :声明该类为一个配置类,类似一个配置文件
  • @EnableConfigurationProperties({HttpProperties.class}):
    启动指定的类的@ConfigurationProperties功能,并且将配置文件中的配置信息与指定的类HttpProperties向绑定,并将该类导入容器;
  • @ConditionalOnWebApplication:判断当前应用是否为一个web应用,是则改配置类生效;@Conditional是Spring顶层注解,用来根据条件决定配置是否生效
  • @ConditionalOnClass({CharacterEncodingFilter.class}):判断当前应用中存在指定的类时配置生效;
  • @ConditionalOnProperty( prefix = “spring.http.encoding”,value = {“enabled”}, matchIfMissing = true):判断当前应用配置中是否存在"spring.http.encoding.enabled"配置,存在当前配置项生效;matchIfMissing = true表示即便没有前面的配置,配置项也生效;

        HttpEncodingAutoConfiguration对象的创建依赖于其对应的属性类HttpProperties,下面再来看看HttpProperties.

@ConfigurationProperties(
    prefix = "spring.http"
)
public class HttpProperties {
    private boolean logRequestDetails;
    private final HttpProperties.Encoding encoding = new HttpProperties.Encoding();

    public HttpProperties() {
    }

    public boolean isLogRequestDetails() {
        return this.logRequestDetails;
    }

    public void setLogRequestDetails(boolean logRequestDetails) {
        this.logRequestDetails = logRequestDetails;
    }

    public HttpProperties.Encoding getEncoding() {
        return this.encoding;
    }

    public static class Encoding {
        public static final Charset DEFAULT_CHARSET;
        private Charset charset;
        private Boolean force;
        private Boolean forceRequest;
        private Boolean forceResponse;
        private Map<Locale, Charset> mapping;
		...
    }
}

我们可以看到HttpProperties 内部有个静态内部类Encoding,这里面定义了编码相关的属性,这也就是我们可以进行设置和修改的。并且HttpProperties 对象创建时已经将Encoding作为其一个属性创建出来,所以我们在配置文件中使用编码的配置时,其书写格式就为:spring.http.encoding.enconding类的属性=xxx。
到此,SpringBoot的自动配置原理就介绍完了,其他的配置类分析过程类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值