自动配置原理
Spring提供了很多@Enablexxx的注解,这些注解都是用来开启某个功能。在SpringBoot中新加了一个@EnableAutoConfiguration注解,该注解用于开启自动配置功能。
在@EnableAutoConfiguration注解中导入(@Import)了AutoConfigurationImportSelector类,该类实现了ImportSelector接口,接口中只有一个selectImports方法,该方法可以根据一定的条件决定注入哪些Bean或者注解。
在SpringBoot的自动配置的ImportSelector实现类中,重点是getCandidateConfigurations方法,在该方法中会有SpringFactoriesLoader加载器(Spring自己实现的SPI机制)去加载每个jar包中META-INF文件夹的spring.factories文件,该文件中存储了自动配置的全限定类名(可以多个)并返回一个List
在Spring4框架的新特性中提供了一系列的@Conditional注解,这些注解使得在初始化配置类时,需要满足特定的条件才启用一些配置
注解 | 说明 |
---|---|
@ConditionalOnClass | 当指定的class位于类路径(classpath)上时,才会实例化装配一个Bean或者配置类 |
@ConditionalOnBean | 当Spring容器上下文中存在一个Bean时,才会实例化装配一个Bean |
@ConditionalOnMissingBean | 当Spring容器上下文中不存在某个对象时,才会实例化装配一个Bean |
@ConditionalOnExpression | 当表达式为True时,才会实例化一个Bean |