栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Import注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Import注解

五、Import注解 向Spring容器中注册bean

1、@Configuration注解结合@Bean注解向Spring容器中注册bean;
2、可以按照条件向Spring容器中注册bean;(Conditional)
3、可以使用@Import注解向容器中快速导入bean对象;可以在@Import注解中使用ImportBeanDefinitionRegistrar向容器中注册bean。
4、向容器中注册Bean,实现FactoryBean<>接口;

1、使用@Import注解给容器中快速导入一个组件

Import源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {

   
   Class[] value();

}

可以多个导入,也可以单个导入;由源码可知,数组;

@Import({Color.class, Red.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})// @Import快速地导入组件,id默认是组件的全类名
2、在@Import注解中使用ImportSelector接口导入bean

ImportSelector接口是Spring中导入外部配置的核心接口,在Spring Boot的自动化配置和@EnableXXX(功能性注解)都有它的存在。我们先来看一下ImportSelector接口的源码,如下所示。

在ImportSelector接口的selectImports()方法中,存在一个AnnotationMetadata类型的参数,这个参数能够获取到当前标注@Import注解的类的所有注解信息,也就是说不仅能获取到@Import注解里面的信息,还能获取到其他注解的信息。

首先,我们创建一个MyImportSelector类实现ImportSelector接口,使用Import将MyImportSelector类注册到Import中;ImportSelect返回的是一个数组;
注意:Import的id默认是组件的全类名;所以:要想用ImportSelector接口,必须写全类名;

public class MyImportSelector implements ImportSelector {
    
    // 返回值:就是要导入到容器中的组件的全类名
    // AnnotationMetadata:当前标注@Import注解的类的所有注解信息,也就是说不仅能获取到@Import注解里面的信息,还能获取到其他注解的信息
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {

        return new String[]{"com.baidu.bean.Blue","com.baidu.bean.Yellow"};// 可以返回一个空数组
    }
}
3、在@Import注解中使用ImportBeanDefinitionRegistrar向容器中注册bean

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        //容器中同时拥有Blue,和Yellow 在向容器中添加rainBow
        boolean definition = registry.containsBeanDefinition("com.baidu.bean.Blue");
        boolean definition2 = registry.containsBeanDefinition("com.baidu.bean.Yellow");

        if (definition && definition2){
            RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(RainBow.class);
            registry.registerBeanDefinition("rainBow",rootBeanDefinition);
        }
        
    }
}





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号