zoukankan      html  css  js  c++  java
  • 三、Spring注解之@Import

    spring注解之@Import

    【1】@Import

    ​ 参数value接收一个Class数组,将你传入的类以全类名作为id加入IOC容器中

    ​ 比较简单,此处不做详细解释

    【2】ImportSelector

    ​ ImportSelector强调的是复用性,使用它需要创建一个类实现ImportSelector接口,实现方法的返回值是字符串数组,也就是需要注入容器中的组件的全类名。id同样也是全类名。

    ​ 上代码:

    //自定义逻辑返回需要导入的组件
    public class MyImportSelector implements ImportSelector {
    	// 返回值就是导入到容器中的组件全类名
    	// AnnotationMetadata:当前标注@Import注解的类的所有注解信息
    	public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    		return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" };
    	}
    }
    

    【3】ImportBeanDefinitionRegistrar

    ​ spring官方就是用这种方式,实现了@Component、@Service等注解的动态注入机制。定义一个ImportBeanDefinitionRegistrar的实现类,然后在有@Configuration注解的配置类上使用@Import导入

    ​ 具体使用:创建一个ImportBeanDefinitionRegistrar的实现类,实现registerBeanDefinitions方法,对组件进行注入。

    public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
        /**
         * @param annotationMetadata 当前标注@Import注解的类的所有注解信息
         * @param beanDefinitionRegistry BeanDefinition的注册类
         */
        public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
            RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class);
            beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition);
        }
    }
    

    ​ 配置类MyConfig:

    @Configuration
    @Import(value = {MyBeanDefinitionRegistrar.class})
    public class MyConfig {
    }
    
    /**测试结果
    beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
    beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
    beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor
    beanName: org.springframework.context.event.internalEventListenerProcessor
    beanName: org.springframework.context.event.internalEventListenerFactory
    beanName: myConfig
    beanName: cat
    */
    
  • 相关阅读:
    BZOJ3098 Hash Killer II 【概率】
    BZOJ4010 [HNOI2015]菜肴制作 【拓扑排序 + 贪心】
    洛谷P4364 [九省联考2018]IIIDX 【线段树】
    洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】
    洛谷P2664 树上游戏 【点分治 + 差分】
    BZOJ1189 [HNOI2007]紧急疏散evacuate 【二分 + 网络流】
    BZOJ1068 [SCOI2007]压缩 【区间dp】
    BZOJ4033 [HAOI2015]树上染色 【树形dp】
    BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
    排序
  • 原文地址:https://www.cnblogs.com/lee0527/p/11735485.html
Copyright © 2011-2022 走看看