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
    1. select:importSelect使其生效
    2. 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探究应用的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码解析之基础应用

Spring Security探究之路之开始

Spring初探究之IoC思想

性能测试分析之HTTP资源消耗探究

Spring5源码深度分析之理解@Conditional,@Import注解

Spring Framework 组件注册 之 @Import