SpringBoot自动配置
SpringBoot自动配置
入口:
1 |
|
@SpringBootApplication:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18({ElementType.TYPE})
(RetentionPolicy.RUNTIME)
(
excludeFilters = {(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), (
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public SpringBootApplication {
...
}
@EnableAutoConfiguration:
1 | ({ElementType.TYPE}) |
AutoConfigurationImportSelector:
1 | protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { |
查看META-INF/spring.factories:
1 | ... |
查看其中的一个类org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration:
1 | ( |
查看RabbitProperties 即会配置相关spring.rabbitmq开头的配置:
1 | ( |
条件注解
1 | :当容器里有指定的bean的条件下。 |
自动配置流程
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。