为什么要自动装备
如果像之前Spring之前那样注入Bean需要自己一个个添加xml或者注入Bean对象,存在大量重复且劳累的工作。例如:注入Nacos组件时,你需要注入NacosRegistry等等Bean,如果是之前,就需要自己一个个写了。
那么在Springboot当中,只需要你引入Nacos依赖启动器,那么springboot就会自动注入这些nacos相关的Bean,省去了编码的成本。
实现的原理
通过SpringFactoriesLoader加载对应jar包MATE-INF目录下的spring.factories文件,具体实现类是AutoConfigurationImportSelector类getCandidateConfigurations方法,然后搭配上@Condition注解进行条件式的注入.
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
评论区