@Import
原理:
组件扫描:Spring框架会通过组件扫描机制,自动扫描并加载带有@Configuration注解或其他指定注解的配置类,将它们识别为配置类。
注册配置类:当一个配置类被识别后,Spring会将其实例化为一个Bean,并将其注册到容器中。这样,配置类内部定义的所有Bean都可以由Spring容器进行管理。
用途:
1. 导入其他配置类:如果@Import的参数是其他配置类(例如@Configuration注解的类),Spring会将导入的配置类也加入到容器中,使得被导入的配置类内部定义的Bean也可以被管理。
2. 导入普通类:如果@Import的参数是普通类,则Spring会将该类实例化为一个Bean,并注册到容器中。
3. 导入实现了ImportSelector的类:如果@Import的参数是实现了ImportSelector接口的类,Spring会调用ImportSelector接口的selectImports()方法,根据返回的类名数组将相应的类注册为Bean。
4. 导入实现了ImportBeanDefinitionRegistrar的类:如果@Import的参数是实现了ImportBeanDefinitionRegistrar接口的类,Spring会调用ImportBeanDefinitionRegistrar接口的registerBeanDefinitions()方法,通过编程方式注册Bean定义到容器中。可以通过自定义的逻辑来注册额外的Bean。
前两种适应于无法被Spring直接扫描到的场景