关于spring中@Import注解的用法

@Import(Class[] value)可以将value的类上的注解引入到使用@Import的类中。

-----若@Import(Object.class)中的Object实现了ImportBeanDefinitionRegistrar接口,不管有没有实现接口方法,这个Object对象上的注解都不会以配置的方式加入到spring容器中。
(ImportBeanDefinitionRegistrar有两个重载接口方法,同时实现两个时只会执行三个入参的方法,此方法作为spring注册beanDefinition的拓展点,执行时机在spring默认扫描之后。都由ConfigurationClassPostProcessor完成)

-----若@Import(Object.class)中的Object没有实现ImportBeanDefinitionRegistrar接口,则spring会将这个Object对象上的所有注解带入到使用@Import注解的类中(此时Object也会被spring管理,既Object也成为了一个bean),
这个类在spring环境中拥有Object所有的注解,bean化注解除外。

重要: 
    只有当一个类使用spi机制或者含有bean化注解时使用@Import才会生效(@Import(Object.class)的Object类不需要是bean)
 spi:最早由java语义定义,表示java启动流程中会调用规定的接口方法,spring自己的spi机制为META-INFO/spring.factories里定义的接口实现类,spring启动会扫描它们

举个栗子说明一下@Import的用法:

@Configuration

@Import(Y.class)
public class X{
}

@MpperScan("xxxxx")
public class Y{
}

此时spring容器启动的时候就会把 @MapperScan("xxxxx")带入配置类(X)中,其实此时类Y也是一个Bean。

若:

@Configuration

@Import(Y.class)
public class X{
}

@MpperScan("xxxxx")
public class Y implement  ImportBeanDefinitionRegistrar{
}

则spring启动的时候配置@MpperScan("xxxxx")不会生效,但是如果Y实现了ImportBeanDefinitionRegistrar的接口方法,则spring启动时ConfiugrationClassPostProcessor这个处理器会调用到这个方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值