021 使用@Import註解完成Bean的註冊
阿新 • • 發佈:2018-05-27
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的註冊