Condition
自定义条件:
1.定义条件类:自定义实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean值.matches方法两个参数:
context: 上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等.
metadata: 元数据对象,用于获取注解属性.
2.判断条件: 在初始化Bean时,使用@Conditiononal(条件类.class)注解.
SpringBoot提供的常用条件注解:
ConditionalOnProperty: 判断配置文件中是否有对应属性和值才初始化Bean
ConditionalOnClass: 判断环境中是否有对应字节码文件才初始化Bean
ConditionalOnMissingBean: 判断环境中没有对应Bean才初始化Bean
@Enable*注解
SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启用某些功能的.而其底层原理是使用@Import注解导入一些配置类,实现Bean的动态加载.
@Import注解
@Enable*底层依赖于@Import注解导入一些类,是哟个@Import导入的类会被Spring加载到容器中.而@Import提供4种用法:
1.导入Bean
2.导入配置类
3.导入ImportSelector实现类.一般用于加载配置文件中的类
4.导入ImportBeanDefinitionRegistrar实现类
@EnableAutoConfiguration注解
@EnableAutoConfiguration注解内部使用@Import(AutoConfigurationI吗port Selector.class)来加载配置类.
配置文件位置: META-INF/spring.factories,该配置文件中定义了大量的配置类,当SpringBoot应用启动时,会自动加载这些配置类,初始化Bean
并不是所有的Bean都会被初始化,再配置类中使用Condition来加载满足条件的Bean.