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编码自动配置)为例解释自动配置原理;

Springboot之自动装配原理_jar包

 

 注解如下

@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作用)


 Springboot之自动装配原理_spring_02