通过 @Import向Spring容器注册组件
@Import注册组件的三种方式:
-
直接指定需要导入的类
public class Person { }@Configuration @Import(Person.class) public class MainConfig { } -
自定义选择器(实现ImportSelector接口)
@Configuration @Import(value = MyImportSelector.class) public class MainConfig { }public class MyImportSelector implements ImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{"com.example.bean.Person"}; } } -
自定义注册器(实现ImportBeanDefinitionRegistrar接口)
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { BeanDefinition personBeanDefinition = new RootBeanDefinition(Person.class); registry.registerBeanDefinition("person", personBeanDefinition); } }
编写测试类,控制台打印结果:
public class MainTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
System.out.println(name);
}
}
}