美文网首页
ImportSelector使用

ImportSelector使用

作者: 莫看烟雨 | 来源:发表于2018-08-23 23:01 被阅读0次

    ImportSelector就比较牛逼了,可以读取annotation的属性来决定要加载哪些Configuration。
    以下为ImportSelector的接口定义:

    /**
     * Interface to be implemented by types that determine which @{@link Configuration}
     * class(es) should be imported based on a given selection criteria, usually one or more
     * annotation attributes.
     *
     * <p>An {@link ImportSelector} may implement any of the following
     * {@link org.springframework.beans.factory.Aware Aware} interfaces, and their respective
     * methods will be called prior to {@link #selectImports}:
     * <ul>
     * <li>{@link org.springframework.context.EnvironmentAware EnvironmentAware}</li>
     * <li>{@link org.springframework.beans.factory.BeanFactoryAware BeanFactoryAware}</li>
     * <li>{@link org.springframework.beans.factory.BeanClassLoaderAware BeanClassLoaderAware}</li>
     * <li>{@link org.springframework.context.ResourceLoaderAware ResourceLoaderAware}</li>
     * </ul>
     *
     * <p>ImportSelectors are usually processed in the same way as regular {@code @Import}
     * annotations, however, it is also possible to defer selection of imports until all
     * {@code @Configuration} classes have been processed (see {@link DeferredImportSelector}
     * for details).
     *
     * @author Chris Beams
     * @since 3.1
     * @see DeferredImportSelector
     * @see Import
     * @see ImportBeanDefinitionRegistrar
     * @see Configuration
     */
    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);
    
    }
    

    selectImports方法的返回值为Configuration主类的全类名。
    使用方法和ImportBeanDefinitionRegistrar类似,也是通过import来引入生效的。
    举例如下:

    @SpringBootApplication
    @ComponentScan
    @RestController
    @EnableConfigurationProperties(RedisProp.class)
    @Import(DataConfig3.class)
    public class TestApplication
    
    public class DataConfig3 implements ImportSelector{
        @Override
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[]{DataConfig.class.getName()};
        }
    }
    

    相关文章

      网友评论

          本文标题:ImportSelector使用

          本文链接:https://www.haomeiwen.com/subject/zjjviftx.html