zoukankan      html  css  js  c++  java
  • 6、spring注解学习(组件注册)——使用spring提供的FactoryBean(工厂bean)注入组件

    1、创建一个Color类

     2、再创建自定义工厂类(实现FactoryBean接口)

    //创建一个spring定义的FactoryBean
    public class ColorFactoryBean implements FactoryBean<Color> {
        
        //返回一个Color对象,这个对象会添加到容器中
        @Override
        public Color getObject() throws Exception {
            return new Color();
        }
    
        @Override
        public Class<?> getObjectType() {
            return Color.class;        //返回对象的类型
        }
        
        //设置这个返回的bean是单例还是多例,true:单例;false:多例
        @Override
        public boolean isSingleton() {
            return true;
        }
    
    }

    3、在spring配置类中注入自定义的工厂类

    @Configuration        //告诉Spring这是配置类
    public class MainConfig {
        
        /*
         * 这里注入的是colorFactoryBean
         * 在容器中通过id为colorFactoryBean获得bean时为该工厂的getObject返回的对象
         * 如果想获得这个工厂bean,则需要在查询时的id前面加一个&,即&colorFactoryBean
         */
        @Bean("colorFactoryBean")
        public ColorFactoryBean colorFactoryBean() {
            return new ColorFactoryBean();
        }
    }

    4、进行测试

        /**
         * 测试通过FactoryBean方式注入组件
         */
        @Test
        public void test03() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
            Object bean = applicationContext.getBean("colorFactoryBean");
            System.out.println("bean的类型:"+bean.getClass());
        }

    输出结果:

    因为查询id为 colorFactoryBean所以默认是获取colorFactoryBean的getObject返回的对象,所以返回对象类型是com.atguigu.bean.Color

    若就是想获得这个colorFactoryBean工厂bean,则在查询id前加一个&

    即测试方法改为:

        /**
         * 测试通过FactoryBean方式注入组件
         */
        @Test
        public void test03() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
            Object bean = applicationContext.getBean("&colorFactoryBean");
            System.out.println("bean的类型:"+bean.getClass());
        }

    输出结果为:

     加&后获得的是com.atguigu.bean.ColorFactoryBean

    再修改测试方法

        /**
         * 测试通过FactoryBean方式注入组件
         */
        @Test
        public void test03() {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
            Object bean1 = applicationContext.getBean("colorFactoryBean");
            Object bean2 = applicationContext.getBean("colorFactoryBean");
            System.out.println(bean1 == bean2);
        }

    输出

     因为在colorFactoryBean里面的isSingleton方法返回的是true,所以获得的对象是单例的

  • 相关阅读:
    c++文件对齐
    笔试题——C++开发简单记录错误模块
    dp算法之有代价的最短路径
    Linux虚拟机安装教程
    C++判断回文
    干货 | 10分钟带你掌握branch and price(分支定价)算法超详细原理解析
    干货 | 10分钟教你用column generation求解vehicle routing problems
    干货 | 10分钟带你彻底了解column generation(列生成)算法的原理附java代码
    干货 | 10分钟搞懂branch and bound(分支定界)算法的代码实现附带java代码
    干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇
  • 原文地址:https://www.cnblogs.com/lyh233/p/12439135.html
Copyright © 2011-2022 走看看