SpringBoot
# 1 自动装配原理
# 1.1 注解说明
SpringBoot 的启动类上有一个 @SpringBootApplication
注解,这是一个复合注解或派生注解,在 @SpringBootApplication
里有一个注解 @EnableAutoConfiguration
用于开启自动配置。
@EnableAutoConfiguration
也是一个派生注解,其中的关键功能由 @Import
提供,其导入的AutoConfigurationImportSelector 的 selectImports() 方法通过 SpringFactoriesLoader.loadFactoryNames() 扫描所有具有 META-INF/spring.factories
的jar包。找到所有配置类的全类名对应的class,然后将所有自动配置类加载到Spring容器中。
spring-boot-autoconfigure-xxx.jar 里就有一个这样的 spring.factories
文件。
# 1.2 自动配置生效
每一个XxxxAutoConfiguration自动配置类都是在某些条件之下才会生效的,这些条件的限制在Spring Boot中以注解的形式体现,常见的条件注解有如下几项:
@ConditionalOnBean:当容器里有指定的bean的条件下。
@ConditionalOnMissingBean:当容器里不存在指定bean的条件下。
@ConditionalOnClass:当类路径下有指定类的条件下。
@ConditionalOnMissingClass:当类路径下不存在指定类的条件下。
@ConditionalOnProperty:指定的属性是否有指定的值,比如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代表当xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。
2
3
4
5
6
7
8
9
# 1.3 总结
SpringBoot 启动的时候会通过 @EnableAutoConfiguration
注解找到 META-INF/spring.factories
配置文件中的所有自动配置类,并对其进行加载。
而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类。
它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性,如:server.port,而XxxxProperties类是通过 @ConfigurationProperties
注解与全局配置文件中对应的属性进行绑定的。