1 @Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名
示例代码
/**
* 被直接import的bean
*/
public class DirectImport{
}
/**
* 测试代码
*/
@Import({DirectImport.class})
@Configuration
public class DirectImportTest {
public static void main(String[] args){
ApplicationContext ac=new AnnotationConfigApplicationContext(DirectImportTest.class);
System.out.println(ac.getBean(DirectImport.class));
}
}
2 ImportSelector:返回需要导入的组件的全类名数组,在此通过另外一个注解EnableImportSelector 间接导入
示例代码
/**
* 通过BeanImportSelector 导入的bean
*/
public class ImportSel {
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(BeanImportSelector.class)
public @interface EnableImportSelector {
}
/**
* 测试代码
*/
@EnableImportSelector
@Configuration
public class DirectImportTest {
public static void main(String[] args){
ApplicationContext ac=new AnnotationConfigApplicationContext(DirectImportTest.class);
System.out.println(ac.getBean(ImportSel.class));
}
}
3.ImportBeanDefinitionRegistrar:手动注册bean到容器中
示例代码
/**
* 通过ImportBeanDefinitionRegistrar导入的bean
*/
public class ImportBeanDefinition {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "ImportBeanDefinition{" +
"name='" + name + '\'' +
'}';
}
}
/**
* 通过此方式,手动初始化BeanDefinition,可以设置bean属性
*/
public class ImportBeanDefinitionRegistrarImport implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinitionBuilder definition = BeanDefinitionBuilder
.genericBeanDefinition(ImportBeanDefinition.class);
definition.addPropertyValue("name","i am ok");
registry.registerBeanDefinition(ImportBeanDefinition.class.getName(),definition.getBeanDefinition());
}
}
/**
* 测试代码
*/
@Configuration
@Import(ImportBeanDefinitionRegistrarImport.class)
public class DirectImportTest {
public static void main(String[] args){
ApplicationContext ac=new AnnotationConfigApplicationContext(DirectImportTest.class);
System.out.println(ac.getBean(ImportBeanDefinition.class));
}
}
网友评论