• (一)IOC 容器:【7】FactoryBean 注册组件


    一、使用 FactoryBean 注册组件

      使用Spring 提供的 FactoryBean(工厂Bean)注册组件。
      Spring中提供了 FactoryBean 这个接口,用于定义工厂Bean。
      

       自定义一个 Spring 的 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;
        }
    
        //控制是否为单例
        //true 这个bean是单实例,在容器中保存一份
        //false 这个bean是多实例,每次获取都创建一个新的
        @Override
        public boolean isSingleton() {
            return true;
        }
    }

      在配置类中注册工厂 Bean:

    @Configuration
    public class MainConfig5 {
    
        @Bean
        public ColorFactoryBean colorFactoryBean() {
            return new ColorFactoryBean();
        }
    }

      测试:

        @Test
        public void test05() {
            ApplicationContext ioc = new AnnotationConfigApplicationContext(MainConfig5.class);
    
            System.out.println("IOC容器创建完成");
    
            //工厂Bean获取的是调用getObject() 方法创建的对象
            //获取的是工厂中生产的 bean 对象
            Object bean = ioc.getBean("colorFactoryBean");
            Object bean2 = ioc.getBean("colorFactoryBean");
            System.out.println(bean == bean2);
    
    
            System.out.println("bean的类型是" +  bean.getClass());
    
            //在id前面加 & 前缀获取工厂
            //获取的是 工厂 本身
            Object bean3 =  ioc.getBean("&colorFactoryBean");
            System.out.println(bean3.getClass());
    
        }

      

      小结:FactoryBean中创建的是工厂中生产的 bean

        (1)默认获取的是工厂 bean,调用 getObject() 创建的对象;

        (2)如果要获取工厂bean本身,需要在 id 前面加上一个 & ,如:&colorFactoryBean

      

    二、给容器中注册组件方式

        1) 通过包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)【适用于添加自己写的类】
        2)@Bean 导入第三方包里面的组件
        3)@Import:快速给容器中导入一个组件
           【1】@Import(要导入到容器中组件),容器会自动注册这个组件,id 默认是全类名;
           【2】ImportSelector:返回需要导入的 组件的全类名数组;
           【3】ImportBeanDefinitionRegistrar:手动注册 bean 到容器中
    
         4)使用Spring提供的FactoryBean(工厂Bean):创建的工厂中生产的bean
            1)默认获取的是工厂bean调用getObject创建的对象
            2)要获取工厂 bean 本身,需要给id前面加一个 &,如:&colorFactoryBean
    

      

  • 相关阅读:
    Beta阶段事后诸葛亮分析
    Beta阶段项目复审
    展示博客
    Beta版本测试报告以及Beta版本发布说明
    团队作业8——第二次项目冲刺(Beta阶段)博客汇总
    团队作业8----第二次项目冲刺(beta阶段)5.25
    团队作业8----第二次项目冲刺(beta阶段)5.24
    团队作业8----第二次项目冲刺(beta阶段)5.23
    团队作业8----第二次项目冲刺(beta阶段)5.22
    团队作业8----第二次项目冲刺(beta阶段)5.21
  • 原文地址:https://www.cnblogs.com/niujifei/p/15549301.html
Copyright © 2020-2023  润新知