戴着假发的程序员出品 抖音ID:戴着假发的程序员欢迎关注
ImportSelector接口
spring应用手册(第五部分)
ImportSelector接口往往是用于导入配置类。ImportSelector接口和@Import注解的使用在上一章节中已经解释过,这里就直接使用了。 我们重点讲解ImportSelector接口。
ImportSelector接口有很多实现类,往往用于注册配置类,在springBoot中有大量的使用。
看看源码:
package org.springframework.context.annotation;
public interface ImportSelector {
String[] selectImports(AnnotationMetadata annotationMetadata);
}
官方文档上的解释:
其主要作用是收集需要导入的配置类,如果该接口的实现类同时实现EnvironmentAware, BeanFactoryAware ,BeanClassLoaderAware或者ResourceLoaderAware,那么在调用其selectImports方法之前先调用上述接口中对应的方法,如果需要在所有的@Configuration处理完在导入时可以实现DeferredImportSelector接口。
所以它的子接口DeferredImportSelector其实是被大量使用的。
看案例:
我们准备两个Bean:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class Coder{
//构造方法
public Coder(){
System.out.println("实例化Coder对象");
}
}
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class Manager {
public Manager(){
System.out.println("实例化Manager对象");
}
}
自己准备一个DeferredImportSelector接口的实现类,并且实现BeanFactoryAware 接口:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class DkSelector implements DeferredImportSelector, BeanFactoryAware {
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println(beanFactory);
}
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//我们再数组中返回我们自己的bean类名的数组
return new String[]{Coder.class.getName(), Manager.class.getName()};
}
}
配置文件:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
@Configuration
@Import(DkSelector.class)//使用Import引入我们自己定义的类
public class Appconfig {
}
测试:
@Test
public void tesSpringImport(){
ApplicationContext ac =
new AnnotationConfigApplicationContext(Appconfig.class);
}
结果:
我们会发现首先注入了我们的BeanFactory对象,然后实例化我们的两个Bean对象。
至此,我们自己定义的