组件注册(4)-@Import

131 阅读1分钟

通过 @ImportSpring容器注册组件


@Import注册组件的三种方式:

  1. 直接指定需要导入的类

    public class Person {
    }
    
    @Configuration
    @Import(Person.class)
    public class MainConfig {
    }
    
  2. 自定义选择器(实现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"};
        }
    }
    
  3. 自定义注册器(实现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);
        }
    }
}

importTest.png

代码地址