下面列出了org.springframework.context.annotation.ImportBeanDefinitionRegistrar#org.springframework.context.annotation.ImportSelector 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
// 复用 {@link ServerImportSelector} 实现,避免重复劳动
ImportSelector importSelector = new ServerImportSelector();
// 筛选 Class 名称集合
String[] selectedClassNames = importSelector.selectImports(importingClassMetadata);
// 创建 Bean 定义
Stream.of(selectedClassNames)
.map(BeanDefinitionBuilder::genericBeanDefinition) // 转化为 BeanDefinitionBuilder 对象
.map(BeanDefinitionBuilder::getBeanDefinition) // 转化为 BeanDefinition
.forEach(beanDefinition ->
// 注册 BeanDefinition 到 BeanDefinitionRegistry
BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, registry)
);
}
private String[] selected(ImportSelector registrar, Class<?> importer) {
if (registrar instanceof DeferredImportSelector) {
return new DeferredConfigurations(Stream.of(registrar.selectImports(getMetaData(importer)))
.map(name -> ClassUtils.resolveClassName(name, context.getClassLoader()))
.collect(Collectors.toList())).list();
}
return registrar.selectImports(getMetaData(importer));
}
private boolean implementsImportSelector() {
return implementsInterface(fromLdescriptorToSlashed(ImportSelector));
}