@import和@Bean的區別,以及ImportSelector和ImportBeanDefinitionRegistrar兩個接口的簡單實用


實用@Bean和@Import的示例

@Configuration
@Import({Dog.class, Cat.class})
public class DemoConfig {
@Bean("tom")
public Person getPerson3(){
System.out.println("沒有添加@condition的普通bean:tom");
return new Person(1,"tom",12);
}
}
運行結果:

demoConfig
cn.enjoy.bean.Dog
cn.enjoy.bean.Cat
tom
從這里可以看出@import和@bean的區別

1、@import的id為全類名

2、@import使用更多功能

ImportSelector的使用,可以更加靈活加載bean

public class HonryImportSeletor implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"cn.enjoy.bean.Tiger","cn.enjoy.bean.Fish"};
}
}
加入到配置類中

@Configuration
@Import({Dog.class, Cat.class,HonryImportSeletor.class})
public class DemoConfig {
@Bean("tom")
public Person getPerson3(){
System.out.println("沒有添加@condition的普通bean:tom");
return new Person(1,"tom",12);
}
}
執行結果:

demoConfig
cn.enjoy.bean.Dog
cn.enjoy.bean.Cat
cn.enjoy.bean.Tiger
cn.enjoy.bean.Fish
tom
ImportBeanDefinitionRegistrar接口的使用,可以通過條件控制想要加載的bean

public class HonryImportBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
boolean b = registry.containsBeanDefinition("cn.enjoy.bean.Dog");
boolean b1 = registry.containsBeanDefinition("cn.enjoy.bean.Fish");
//通過判斷dog和fish在IOC容器中,才加載pig
if(b && b1){
RootBeanDefinition definition = new RootBeanDefinition(Pig.class);
registry.registerBeanDefinition("cn.enjoy.bean.Pig",definition);
}
}
}
配置@import加上

@Configuration
@Import({Dog.class, Cat.class,HonryImportSeletor.class,HonryImportBeanDefinitionRegister.class})
public class DemoConfig {
@Bean("tom")
public Person getPerson3(){
System.out.println("沒有添加@condition的普通bean:tom");
return new Person(1,"tom",12);
}
}
輸出結果:

demoConfig
cn.enjoy.bean.Dog
cn.enjoy.bean.Cat
cn.enjoy.bean.Tiger
cn.enjoy.bean.Fish
tom

@Import支持 三種方式
1.帶有@Configuration的配置類

2. (4.2 版本之前只可以導入配置類,4.2版本之后 也可以導入 普通類)
3.ImportSelector 的實現
4.ImportBeanDefinitionRegistrar 的實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM