1. 程式人生 > >021 使用@Import註解完成Bean的註冊

021 使用@Import註解完成Bean的註冊

con 構造函數 nts rtt ride person poj 就是 register

一 . 概述

在之前我們使用@Bean或者組件掃描器加上組件標記註解向容器中註冊組件.

在spring之中,也提供了另外一種方式幫助我們註冊組件.

這個組件就是@Import的方式.


二 .註解的測試

組件類:

public class Person {

}

配置類:

@Configuration
@Import({Person.class})
public class ImportConfig {
    
}

測試類:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=ImportConfig.class)
public class ImportTest {
    
    @Autowired
    private ApplicationContext context;
    
    @Test
    public void test() {
        System.out.println(context.getBean(Person.class));
    }
}

我們現在可以使用@Import的方式直接將組件註冊到IOC容器之中.

此時註冊的組件僅僅是一個含有無參構造函數的POJO類,且id為全類名.

另外@Import支持更加強大的註冊功能.


三 .組件類實現ImportSelector接口.

public class MyImportSelector implements ImportSelector{

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[] {"com.trek.springConfig.importTest.Person"};
    }

}

該實現類需要返回一組類的全類名.


四 .實現ImportBeanDefinitionRegistrar接口

public class ImportRegister implements ImportBeanDefinitionRegistrar{

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition BeanDefinition = new RootBeanDefinition(Person.class);
        //使用註冊器完成對象的註冊
        registry.registerBeanDefinition("person", BeanDefinition );
    }

}

我們現在需要註意的就是,這些註解式spring底層完成Bean的註冊時進行使用的方式.

021 使用@Import註解完成Bean的註冊