一、Spring中的@Import 注解使用场景
@Import注解在Spring的源码中使用特别深广,值得对其使用场景进行研究与整理。
@Import注解通常可以引入如下类型的java类:
- 导入@Configuration注解的配置类;
- 导入ImportSelector的实现类;
- 导入ImportBeanDefinitionRegistrar的实现类;
二、@Configuration注解的配置类
@Import引入@Configuration注解配置的类,对应import的类都会加入并注册为spring容器中的bean:
@Import({ 类名.class , 类名.class... })
public class MyConfig{
}
三、导入ImportSelector的实现类
编写ImportSelector的实现类,实现selectImports()方法,该方法的相关信息如下:
- 参数AnnotationMetadata : AnnotationMetadata表示当前被@Import注解给标注的所有注解信息
- 返回值String[]: 就是我们实际上要导入到容器中的组件全类名
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//return new String[]{"com.tang.Test.MyConfig"};
//或者:
return new String[]{类1.class.getName(), 类2.class.getName()};
//说明:可以返回空数组但是不能返回null,否则会报空指针异常
}
} 四、导入ImportBeanDefinitionRegistrar的实现类
编写ImportBeanDefinitionRegistrar的实现类,实现registerBeanDefinitions()方法,该方法的相关信息如下:
- 第一个参数:annotationMetadata 和之前的ImportSelector参数一样都是表示当前被@Import注解给标注的所有注解信息
- 第二个参数:表示用于注册定义一个bean
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//指定bean定义信息(包括bean的类型、作用域...)
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestBean.class);
//注册一个bean指定bean名字(id)
beanDefinitionRegistry.registerBeanDefinition("testBean",rootBeanDefinition);
}
}
本文标题:SpringBoot中使用@Import进入java类
本文链接:https://blog.quwenai.cn/post/8352.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。






还没有评论,来说两句吧...