spring之@import探究应用
Posted 张子行的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring之@import探究应用相关的知识,希望对你有一定的参考价值。
本文先介绍@import的用法(很简单的一个东西)接着结合源码来分析@import是如何生效的,当我们想往容器中注入一个bean的时候我们首先就会想到@bean、@Compoent、@Repository这些注解,除此外其实我们还可以使用@import来进行手动装配。@Import源码探究可以阅读 分析自动装配源码、顺带弄懂了@Import等相关的源码(全文3w字、超详细)
用法
配置类
- 导入对应的组件即可:@Import({a.class,importSelect.class,handlerRegisterImport.class})
- 效果:给ioc容器中分别注入了a、select、handlerBean三个bean
- select:importSelect使其生效
- handlerBean:handlerRegisterImport使其生效
@Configuration
@Import({a.class, importSelect.class, handlerRegisterImport.class})
public class beanConfig {
}
importSelect:
- 返回值:return String[]; 数组元素需为包的全路径名,spring会挨个扫描路径下的这些类注入到ioc容器中成为一个bean。
public class importSelect implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
String[] strings = new String[2];
strings[0] = "com.zzh.demo.springSourceApplication.importApplication.prepareBeans.select";
return strings;
}
}
ImportBeanDefinitionRegistrar:
- bean注册中心:BeanDefinitionRegistry registry。我们可以给指定的类注入到ioc容器中,并且进行beanName的DIV操作
public class handlerRegisterImport implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
rootBeanDefinition.setBeanClass(handler.class);
registry.registerBeanDefinition("handlerBean", rootBeanDefinition);
}
}
以上是关于spring之@import探究应用的主要内容,如果未能解决你的问题,请参考以下文章