SpringBoot工作原理
思考一个问题:
-
为什么加载了redis的starter(起步依赖)之后,RedisTemplate对象会自动被new出来,并可以@Autowired了呢?
自动装配
观察@EnableAutoConfiguration
注解内部使用 @Import(AutoConfigurationImportSelector.class)
读取META-INF/spring.factories
,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean
装配Redis
并不是读取META-INF/spring.factories
所有的Bean都会被初始化,在配置类中使用@Condition
来加载满足条件的Bean
-
ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
-
ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
-
ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean