Spring 往 IOC 中添加组件的方式,你知道几种呢?
可能你只知道 @ComponentScan + @Controller + @Service @Respository + @Component
还知道 @Bean 。但是如果你不知道 @Import 的话,你肯定没有看过其他框架的源码!
那下面我们来罗列有哪些添加组件的方式?
-
通过 @CompentScan + @Controller/@Service/@Respository/@compent
适合场景:我们自己写的组件可以通过这种方式来进行加载到容器中。
-
通过 @Bean 的方式来导入组件
适合场景: 适用于导入第三方组件的类
-
通过 @Import 来导入组件
适合场景:导入组件的 id 为全路径,用处最多的是其他框架整个 Spring 时,使用 @Import 注解导入整合类。
代码演示
前两个就不演示了,我们演示『@Import 注解』的使用
-
注解导入需要初始化的类
@Import (value = {Person.class, Car.class})
-
实现 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 容器中。
-
实现 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 中添加组件的方式有以上三种方式。
网友评论