1. 自动装配回顾
在主配置类中有@SpringBootApplication注解
在@SpringBootApplication中有一个自动装配的注解@EnableAutoConfiguration
@EnableAutoConfiguration注解中导入了@Import(AutoConfigurationImportSelector.class)
AutoConfigurationImportSelector.class包含获得候选配置的方法getCandidateConfigurations
getCandidateConfigurations中含有SpringFactoriesLoader.loadFactoryNames来获取包名
查看SpringFactoriesLoader.loadFactoryNames 发现返回的是loadSpringFactories
查看loadSpringFactories 步骤如下:
1.使用枚举类型接收META-INF/spring.factories中的内容
META-INF/spring.factories中储存的是springboot自动装配的jar包
2.接收url,将接收内容封装为property
3.返回
2.配置文件到底能写什么?怎么写?
SpringBoot官方文档中有大量的配置,我们无法全部记住
以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;
注解如下
@Configuration(proxyBeanMethods = false)配置类
@EnableConfigurationProperties(ServerProperties.class) 配置文件
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(CharacterEncodingFilter.class)
@ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true)
判断生效条件
进入ServerProperties类
发现
此注解同上篇yaml批量注入
即ServerProperties 通过yaml关联配置 在通过主配置类实现自动装配
总结:
1、SpringBoot启动会加载大量的自动配置类
2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
附:在yaml中使用debug = true输出生效的jar包
@Conditional派生注解(Spring注解版原生的@Conditional作用)