@Import(Class[] value)可以将value的类上的注解引入到使用@Import的类中。
-----若@Import(Object.class)中的Object实现了ImportBeanDefinitionRegistrar接口,不管有没有实现接口方法,这个Object对象上的注解都不会带到使用@Import注解的类中。
(ImportBeanDefinitionRegistrar有两个重载接口方法,同时实现两个时只会执行三个入参的方法,此方法作为spring注册beanDefinition的拓展点,执行时机在spring默认扫描之后。都由ConfigurationClassPostProcessor完成)
-----若@Import(Object.class)中的Object没有实现ImportBeanDefinitionRegistrar接口,则spring会将这个Object对象上的所有注解带到使用@Import注解的类中,
这个类在spring环境中拥有Object所有的注解,bean化注解除外。
重要:
1、spring的扫描逻辑只能发现声明的注解,不能发现@Import带过来的注解
2、只有当一个类是bean时使用@Import才会生效(@Import(Object.class)的Object类不需要是bean)
举个栗子说明一下@Import的用法:
@Configuration
@Import(Y.class) public class X{ } @MpperScan("xxxxx") public class Y{ }
此时spring容器启动的时候就会把 @MapperScan("xxxxx")带入配置中。
若:
@Configuration
@Import(Y.class) public class X{ } @MpperScan("xxxxx") public class Y implement ImportBeanDefinitionRegistrar{ }
则spring启动的时候环境中并不会带入@MpperScan("xxxxx")