@Import注解的理解与用法

1、@Import概述:

@Import注解一般情况下是spring整合其他框架时使用到的,在使用@Component注解以及其组合组件的时候,这些组件是能被项目扫描到的,如果有其他的框架需要加载一些组件(这些组件不在项目的包中),可以使用@Import注解将其加载进来。注意:默认的@Import注入到组件的加载要先与当前的配置类,DeferredImportSelector的实现类除外。

2、@Import注解的用法:

@Import注解主要用三种使用方法

2.1、导入普通类

可以导入普通的类,也可以导入@Configuration注解的类,配置类将优先加载:

@Import(value = {Bean.class, Configuration.class})

2.2、导入ImportSelector接口的实现类

主要作用是收集需要导入的配置类,会将selectImports方法返回的id的对象注入到Spring容器中。

SpringBoot的自动化配置和@EnableXXX注解一般都会使用这个,他可以依据参数来决定像容器中注入对应的bean。(从注解中获取的参数)

@Import(value = {CustomImportSelector.class})
public class CustomImportSelector implements ImportSelector { 
    // importingClassMetadata配置类上的所有注解元素 
    @Override 
    public String[] selectImports(AnnotationMetadata importingClassMetadata) { 
        // 返回类的全限定类名,不管该类是不是Spring注解标注bean都会生成bean。 	
        return new String[]{"com.xx.Bean"}; 
    } 
}

常用方式:

  • 直接在配置类上使用@Import ImportSelector实现类

  • 通过EnableXXX注解,在Enable注解上@Import ImportSelector实现类,然后我们再依据Eanble注解中的参数来判断需要加载哪个配置Bean到Spring容器中。

什么时候用?

  • 需要自定义****@EnableXXX****类似功能的场景

  • 需要批量的注入Bean的场景

2.3、导入ImportVeanDefinitionRegistrar接口实现类

ImportBeanDefinitionRegistrar也是一个接口,这个类只是注册Bean的方式可以更加自由,让我自己来创建BeanDefinition并注册到容器中去。这个适合更加复杂的一些框架整合上,我们可以更加灵活的定制我们需要注入容器的bean元素。

@Import(value = {CustomImportSelector.class})
public class CustomBeanDefinitionRegister implements ImportBeanDefinitionRegistrar { 
    /** 
    * importingClassMetadata:配置类上的所有注解元素 
    * BeanDefinitionRegistry: 注册器,可以注入一些bean定义到容器中 
    */
    @Override 
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { 
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Bean.class); 
        registry.registerBeanDefinition("bean", rootBeanDefinition); 
    } 
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值