@Import({Lei.class, Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
package com.lei.study_09_14.importSelector; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; /** * * * @author LeiLei * @date 2019/9/14 */ public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { boolean flag = registry.containsBeanDefinition("com.lei.study_09_14.importSelector.Aaa"); if(flag) { RootBeanDefinition rbd = new RootBeanDefinition(Ccc.class); registry.registerBeanDefinition("ccc",rbd); } } }
总结:
1.@Import中可以使用ImportBeanDefinitionRegistrar接口实现类手动对组件进行装配
2.BeanDefinition中其实就是放的组件的属性,比如scope,Lazy,所属bean工厂是谁等等,就是在spring中装配这个组件的一些特殊定义。