SpringBoot自动配置

SpringBoot自动配置

自动配置原理:

1.Springboot启动加载主配置类,开启自动配置功能的注解

   @EnableAutoConfiguration

2.@EnableAutoConfiguration作用:

利用AutoConfigurationImportSelector向容器中导入组件

↓点击 21行

//利用AutoConfigurationImportSelector中的这个方法导入组件
String[] selectImports(AnnotationMetadata annotationMetadata)
                    ↓下面77行
//获取候选配置,放在集合里面
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
                    ↓点击110行
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
                    ↓点击
Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
//urls 方法会扫描所以jar包类路径下"META-INF/spring.factories" 将扫描到的文件内容包装成properties 对象 然后重properties 对象中获取到类名对应的值,再添加到容器中,从而实现了自动配置
Properties properties = PropertiesLoaderUtils.loadProperties(resource);

自动配置的路径在 Maven管理的 spring-boot-autoconfigure-2.2.6.RELEASE.jar下的META-INF/spring.factories

 

以HttpEncodingAutoConfiguration举例:

@Configuration(
  proxyBeanMethods = false
)//表示这是一个配置类,给容器加载组件 
@EnableConfigurationProperties({HttpProperties.class})//开启EnableConfigurationProperties功能
@ConditionalOnWebApplication(
  type = Type.SERVLET
)
@ConditionalOnClass({CharacterEncodingFilter.class})
@ConditionalOnProperty(
  prefix = "spring.http.encoding",
  value = {"enabled"},
  matchIfMissing = true
)
@ConfigurationProperties(//将配置文件中配置的属性的值,映射到当前组件中
  prefix = "spring.http"
)

总结:

1.springboot启动加载大量自动配置类,通过在properties配置文件中启动debug=true查看那些自动配置启动了那些没启动

2.我们需要的功能有没有默认写好的自动配置类,如果有我们就不需要自己再去写。

3.我们可以看自动配置类到底配置了那些组件,如果有我们就不需要配置。

4.给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定属性的值

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值