springBoot自动配置原理分析

// 表示只是一个配置类、和以前编写的配置文件一样
@Configuration(proxyBeanMethods = false)
// 指定配置文件,httpProperties 对应我们编程配置文件,假设配置文件中有就有配置文件,没有就用默认值
@EnableConfigurationProperties(ServerProperties.class)
//ConditionalOnXX Spring底层注解
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
//如果CharacterEncodingFiler  这个类,这个配置才生效
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)
public class HttpEncodingAutoConfiguration {

	private final Encoding properties;

	public HttpEncodingAutoConfiguration(ServerProperties properties) {
		this.properties = properties.getServlet().getEncoding();
	}

	@Bean
	@ConditionalOnMissingBean
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Encoding.Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Encoding.Type.RESPONSE));
		return filter;
	}

	@Bean
	public LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() {
		return new LocaleCharsetMappingsCustomizer(this.properties);
	}

	static class LocaleCharsetMappingsCustomizer
			implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>, Ordered {

		private final Encoding properties;

		LocaleCharsetMappingsCustomizer(Encoding properties) {
			this.properties = properties;
		}

		@Override
		public void customize(ConfigurableServletWebServerFactory factory) {
			if (this.properties.getMapping() != null) {
				factory.setLocaleCharsetMappings(this.properties.getMapping());
			}
		}

		@Override
		public int getOrder() {
			return 0;
		}

	}

}


1.springBoot 启动会加载大量的自动配置类!spring.factories
2.判断我们的类是否存在这里面,如果不存在我们需要手动导入、如果存在导入启动器!
3.我们的配置文件之所以可以自动配置生效
	xxxAutoConfiguation: 自动配置类,根据条件@ConfitionalOnxxx判断是否生效:如果生效则成功注入bean;
	xxxProperties:封装配置文件的相关属性;
4.给容器中自动配置类配置属性的时候,会通过xxxPorperties 类来获取某用户文件中的属性,如果没有则使用默认的,如果有则自动配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值