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 的实现

  • 相关阅读:
    CH1402 后缀数组【Hash】【字符串】【二分】
    poj3974 Palindrome【回文】【Hash】【二分】
    CH1401 兔子与兔子【字符串】【HASH】
    hdu5542 The Battle of Chibi【树状数组】【离散化】
    poj3349 Snowflake Snow Snowflakes【HASH】
    poj1821 Fence【队列优化线性DP】
    poj2376 Cleaning Shifts【线段树】【DP】
    poj3171 Cleaning Shifts【线段树(单点修改区间查询)】【DP】
    CH0601 Genius ACM【倍增】【归并排序】
    logging模块
  • 原文地址:https://www.cnblogs.com/liujianping/p/14921367.html
Copyright © 2011-2022 走看看