org.springframework.context.annotation.ImportBeanDefinitionRegistrar#org.springframework.context.annotation.ImportSelector源码实例Demo

下面列出了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));
}
 
源代码3 项目: spring-boot-graal-feature   文件: Type.java
private boolean implementsImportSelector() {
	return implementsInterface(fromLdescriptorToSlashed(ImportSelector));
}