System.out.println(ac.getBean(LogService.class));
}
}
方式三:ImportBeanDefinitionRegistrar方式
这种方式和第二种方式很相似,同样的要实现 ImportBeanDefinitionRegistrar 接口
public class GpImportDefinitionRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
// 指定bean的定义信息
RootBeanDefinition beanDefinition = new RootBeanDefinition(CacheService.class);
RootBeanDefinition beanDefinition1 = new RootBeanDefinition(LogService.class);
// 注册一个bean
beanDefinitionRegistry.registerBeanDefinition(“cacheService1111”,beanDefinition);
beanDefinitionRegistry.registerBeanDefinition(“cacheService2222”,beanDefinition1);
}
}
5.4 深入分析EnableAutoConfiguration原理
了解了ImportSelector
和ImportBeanDefinitionRegistrar
后,对于EnableAutoConfiguration
的理解就容易一些了
它会通过import导入第三方提供的bean的配置类:AutoConfigurationImportSelector
AutoConfigurationImportSelector
public String[] selectImports(AnnotationMetadata annotationMetadata) {
if (!this.isEnabled(annotationMetadata)) {
return NO_IMPORTS;
} else {
try {
// 加载META-I