2.修改 BeanConfig 配置类,即增加 @Import 注解将 Student 导入到容器中。
在 App05 的 main 方法中将容器中的实例名都打印出来:
运行效果:
输出结果已经出现了 Student 实例,并且是全类名,说明 @Import 注解默认是用全类名作为容器中的实例名。
@Import 注解的属性 value 是一个数组类型,也就是说可以使用 @Import 导入多个类。
3.在 @Import 注解里提到了 ImportSelector 接口,实现这个接口也可以导入类。再创建一个 Teacher 类:
创建 CustomImportSelector 实现 ImportSelector 接口:
1、通过 AnnotationMetadata 可以取得当前标注 @Import 注解的类上的所有注解信息;
2、返回值就是需要注册到容器的全类名;
3、方法不能返回 null,否则会报空指针异常,但是可以返回一个空的字符串数组。
修改 BeanConfig 配置类,在 @Import 注解中增加 CustomImportSelector.class:
运行效果:
4.除了 ImportSelector 接口,还有一个 ImportBeanDefinitionRegistrar 接口也能实现类似功能。再创建一个 Worker 类:
创建 CustomImportBeanDefinitionRegistrar 实现 ImportBeanDefinitionRegistrar 接口:
1、AnnotationMetadata 可以当前类的注解信息;
2、BeanDefinitionRegistry 是 bean 定义注册类,把需要注册到容器的类,通过调用 BeanDefinitionRegistry 的 registerBeanDefinition()方法手动注册;
3、RootBeanDefinition 是 BeanDefinition 的一个实现类,用来定义 bean。
修改 BeanConfig 配置类,在 @Import 注解中增加 CustomImportBeanDefinitionRegistrar.class:
运行效果:
领取专属 10元无门槛券
私享最新 技术干货