注解-组件注册04-@Import

  目前注册组件的方式有:

注册组件:
1)包扫描+组件标注注解(@Controller @Service @Repository @Component)
2)@Bean[导入的第三方包里的组件]

   下面来说第三种方式@Import:

@Import[快速给容器中导入一个组件]
1)@Import(要导入到容器中的组件),容器中就会自动注册这个组件,id默认是全类名
2)ImportSelector:返回需要导入的组建的全类名数组
3)ImportBeanDefinitionRegistrar:手动注册bean到容器中
@Configuration
//Red Color Blue Yellow RainBow均为被注解修饰 @Import({ Red.
class, MyImportSelector.class, MyImportBeanRegister.class}) public class MainConfig2 { /** * 注册组件: * 1)包扫描+组件标注注解(@Controller @Service @Repository @Component) * 2)@Bean[导入的第三方包里的组件] * 3)@Import[快速给容器中导入一个组件] * 1)@Import(要导入到容器中的组件),容器中就会自动注册这个组件,id默认是全类名 * 2)ImportSelector:返回需要导入的组建的全类名数组 * 3)ImportBeanDefinitionRegistrar:手动注册bean到容器中 */ }
public class MyImportSelector implements ImportSelector {
    //返回值就是导入到容器中的组件类全类名
    //AnnotationMetadata:当前标注@Import注解的类的所有注解信息
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"Yellow","Blue"};
    }
}
public class MyImportBeanRegister implements ImportBeanDefinitionRegistrar {
    /**
     * @param annotationMetadata 当前类的注解信息
     * @param registry BeanDefinition注册类,把所有需要添加到容器中的bean,
     *                               调用BeanDefinitionRegistry.registerBeanDefinition()手工注册进来
     */
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
        boolean red = registry.containsBeanDefinition("Red");
        boolean blue = registry.containsBeanDefinition("Blue");
        if(red && blue){
            RootBeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class);
            registry.registerBeanDefinition("rainBow",beanDefinition);
        }
    }
}

 

posted @ 2020-06-10 14:04  Qmillet  阅读(167)  评论(0编辑  收藏  举报