zoukankan      html  css  js  c++  java
  • 9、组件注册-@Import-使用ImportSelector

    9、组件注册-@Import-使用ImportSelector

    9.1 @Import 源码:

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Import {
    
    	/**
    	 * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
    	 * or regular component classes to import.
    	 */
    	Class<?>[] value();
    
    }
    

    可以使用ImportSelector来注册组建

    public interface ImportSelector {
    
    	/**
    	 * Select and return the names of which class(es) should be imported based on
    	 * the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
    	 */
    	String[] selectImports(AnnotationMetadata importingClassMetadata);
    
    }
    

    9.2 自定义逻辑返回需要注入的组建

    新建 MyImportSelector implements ImportSelector 重写selectImports 方法。

    package com.hw.springannotation.conditional;
    
    import org.springframework.context.annotation.ImportSelector;
    import org.springframework.core.type.AnnotationMetadata;
    
    /**
     * @Description 自定义逻辑返回需要注入的组建
     * @Author hw
     * @Date 2018/11/28 15:52
     * @Version 1.0
     */
    public class MyImportSelector implements ImportSelector {
        /**
         * 返回值就是需要导入的组建 全类名
         *
         * @param importingClassMetadata 当前标注@Import注解类的所有注解信息
         */
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            // 不能返回null
            return new String[]{"com.hw.springannotation.beans.Blue"};
        }
    }
    

    9.3 引入@Import

    @Import({Color.class, Red.class, MyImportSelector.class})    // 快速导入组建,ID 默认是全路径包名
    
    

    9.4 运行测试类

        /**
         * @Import注解
         */
        @Test
        public void testImport() {
            printBeans();
    //        System.exit(0);
        }
    
        private void printBeans(){
            String[] names = applicationContext.getBeanDefinitionNames();
            for (String name : names) {
                System.out.println(name);
            }
        }
    

    结果如图:

  • 相关阅读:
    WML
    CocoaPods install 安装
    刷新控件,审核
    UIImageView
    课堂练习——返回一个一维整数数组中最大子数组的和
    团队与题目介绍
    学习进度条05
    软件工程结对作业02
    课堂练习——返回一个整数数组中最大子数组的和
    学习进度条04
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/10025349.html
Copyright © 2011-2022 走看看