zoukankan      html  css  js  c++  java
  • @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 的实现

  • 相关阅读:
    WM_CHAR消息分析
    数据库OleDbConnection对象参考
    数据库使用Command对象进行数据库查询
    如何在VBNET中使用调试输出类Debug和Trace
    数据库与数据库连接
    数据库ADONETOleDbDataReader对象参考
    VBNET运行时处理对象事件(AddHandler和RemoveHandler)
    防火墙分类简述(班门弄斧了)
    杀毒防护类软件的组合转帖
    数据库ADONETOleDbCommand对象参考
  • 原文地址:https://www.cnblogs.com/liujianping/p/14921367.html
Copyright © 2011-2022 走看看