美文网首页
Spring 使用 @Import 的好处是啥?

Spring 使用 @Import 的好处是啥?

作者: hemiao3000 | 来源:发表于2022-01-15 17:56 被阅读0次

Spring 往 IOC 中添加组件的方式,你知道几种呢?

可能你只知道 @ComponentScan + @Controller + @Service @Respository + @Component

还知道 @Bean 。但是如果你不知道 @Import 的话,你肯定没有看过其他框架的源码!

那下面我们来罗列有哪些添加组件的方式?

  1. 通过 @CompentScan + @Controller/@Service/@Respository/@compent

    适合场景:我们自己写的组件可以通过这种方式来进行加载到容器中。

  2. 通过 @Bean 的方式来导入组件

    适合场景: 适用于导入第三方组件的类

  3. 通过 @Import 来导入组件

    适合场景:导入组件的 id 为全路径,用处最多的是其他框架整个 Spring 时,使用 @Import 注解导入整合类。

代码演示

前两个就不演示了,我们演示『@Import 注解』的使用

  1. 注解导入需要初始化的类

    @Import (value = {Person.class, Car.class})
    
  1. 实现 ImportSelector 接口,在接口中返回id的全路径

    public class HelloImportSelector implements ImportSelector { 
        @Override 
        public String[] selectImports(AnnotationMetadata importingClassMetadata) { 
                return new String[]{"com.xx.testimport.compent.Person"}; 
        } 
    } 
    
    @Configuration 
    @Import(value = {HelloImportSelector.class}) 
    @ComponentScan(basePackages ={"com.xx.testimport.scanner"}) 
    public class MainConfig { 
    }
    
运行后 Person 就会被加载到 Spring 容器中。
  1. 实现 ImportBeanDefinitionRegistrar 接口

    class XxxBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {
        @Override 
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { 
            RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Person.class);   
            registry.registerBeanDefinition("person",rootBeanDefinition); 
        } 
    } 
    
    @Configuration 
    @Import(value = { XxxBeanDefinitionRegister.class})
    @ComponentScan(basePackages ={"com.xxx.testimport.scanner"}) 
    public class MainConfig { 
    }
    

Spring 往 IOC 中添加组件的方式有以上三种方式。

相关文章

网友评论

      本文标题:Spring 使用 @Import 的好处是啥?

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