前面我们已经介绍了几种为容器中添加组件的方法,今天一起学习通过FactoryBean添加组件的方法。

首先我们准备一个类,也就是我们需要注册进spring的ioc容器中的类

类Color:

// 不必关心该类的具体代码实现,我们只是要把它注册进容器中即可
public class Color {private Car car;public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return "Color [car=" + car + "]";}
}

如果呢,我们想要通过FactoryBean来为容器中添加组件,我们需要实现这个类。

首先来看下这个工厂bean的结构:

我们再来写个ColorFactoryBean类实现这个工厂Bean的接口

import org.springframework.beans.factory.FactoryBean;
//创建一个Spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<Color> {//返回一个Color对象,这个对象会添加到容器中@Overridepublic Color getObject() throws Exception {System.out.println("ColorFactoryBean...getObject...");return new Color();}@Overridepublic Class<?> getObjectType() {return Color.class;}//是单例?//true:这个bean是单实例,在容器中保存一份//false:多实例,每次获取都会创建一个新的bean;@Overridepublic boolean isSingleton() {return false;}
}

这个类非常简单,我们最终的目的是要将Color这个类注册到容器中,但前提是ColorFactoryBean也在容器中。所以呢我们在配置中注册这个ColorFactoryBean

@Configuration
public class MainConfig2 {  /*** 4)、使用Spring提供的 FactoryBean(工厂Bean);*      1)、默认获取到的是工厂bean调用getObject创建的对象*      2)、要获取工厂Bean本身,我们需要给id前面加一个&*          &colorFactoryBean*/@Beanpublic ColorFactoryBean colorFactoryBean(){return new ColorFactoryBean();}
}

我们编写一个测试方法进行测试

    @Testpublic void testImport(){AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);//工厂Bean获取的是调用getObject创建的对象Object bean2 = applicationContext.getBean("colorFactoryBean"); // 获取colorFactoryBeanObject bean3 = applicationContext.getBean("colorFactoryBean");System.out.println("bean的类型:"+bean2.getClass()); // 打印出具体的类型,观察控制台,实际是//Color这个类System.out.println(bean2 == bean3); // isSingleton返回的false所以不是单例的// 如何获取到工厂bean本身呢,加上&符号Object bean4 = applicationContext.getBean("&colorFactoryBean"); System.out.println(bean4.getClass());}

打印结果:

ColorFactoryBean...getObject...
ColorFactoryBean...getObject...
bean的类型:class com.atguigu.bean.Color
false
class com.atguigu.bean.ColorFactoryBean

转载于:https://www.cnblogs.com/heliusKing/p/11379599.html

六、spring之通过FactoryBean为ioc容器中添加组件相关推荐

  1. 往IOC 容器中添加组件的方式

    通过@CompentScan +@Controller @Service @Respository @compent 适用场景: 针对我们自己写的组件可以通过该方式来进行加载到容器中. 通过@Bean ...

  2. Spring5 - 向IOC容器中添加组件的4种方式

    文章目录 概述 方式一: @CompentScan 适用场景 Code 方式二: @Bean 适用场景 Code 方式三: @Import 适用场景 Code Demo1 Code Demo2 + 实 ...

  3. Spring中将BeanDefinition注册到IOC容器中

    Spring中将BeanDefinition注册到IOC容器中 XML配置元信息 <bean name="-" - /> 注解: @Bean,@Component,@I ...

  4. Lumen开发:如何向 IoC 容器中添加自己定义的类

    版权声明:本文为博主原创文章,未经博主允许不得转载. 先在起始文件bootstrap/app.php加上$app->register(App\Providers\User\UserService ...

  5. 给容器中注册组件 || @Scope -- @Lazy -- @Conditional({Condition}) -- @Import--使用Spring提供的 FactoryBean

    * @Scope:调整作用域    * prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中.       *              每次获取的时候才会调用方法创建对象: ...

  6. java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

    前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...

  7. Spring IOC容器和获取组件对象源码分析

    打上断点进行调试 1 第一步是进入了ClassPathXmlApplicationContext调用其构造参数,其中配置文件的内容被解析成了数组 public ClassPathXmlApplicat ...

  8. IOC 容器中那些鲜为人知的细节(关于 FactoryBean 和 BeanFactory)

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 在 Spring 中,有两个很容易混淆的类:BeanFactory 和 FactoryBean. BeanFa ...

  9. 转 Spring源码剖析——核心IOC容器原理

    Spring源码剖析--核心IOC容器原理 2016年08月05日 15:06:16 阅读数:8312 标签: spring 源码 ioc 编程 bean 更多 个人分类: Java https:// ...

最新文章

  1. python画图标题_使用pyplot.matshow()函数添加绘图标题
  2. 平流式沉淀池计算例题_平流式沉淀池计算例题
  3. 我做的小学二年级公开课《生命,生态和安全》的教案
  4. abp vue如何配置服务地址_DHCP服务如何配置才能尽量减少被攻击的可能
  5. iOS开发-仿大众点评iPad侧边导航栏
  6. JQuery控制只能输入带二位小数的数字
  7. 遇到 ORACLE 错误 1658
  8. 自动驾驶——Tracking的学习笔记
  9. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库04 —— 安装HAWQ插件PXF3.3.0.0...
  10. mysql之配置mysql使其可用python远程控制
  11. unity3D android游戏屏幕分辨率问题【转http://blog.csdn.net/jeksonal/article/details/8501549】...
  12. 三角形度数计算机公式,角度数换算公式(三角函数计算换算角度)
  13. 【大咖有约】58同城孙玄:58同城从MongoDB到MySQL迁移之路
  14. installshield java_项目创建失败(vs2012中的InstallShield)
  15. C语言计算BMI值,一看就会
  16. 《国史通鉴》历代一句话概括总结+大脉络记历史~~
  17. ipad屏幕镜像_如何在Windows PC上镜像iPhone或iPad的屏幕
  18. win7 ie8 oracle erp
  19. 利用免费虚拟主机上传静态网站
  20. python操作ppt

热门文章

  1. CV方向介绍 | 基于自然语言的跨模态行人re-id的SOTA方法简述(上)
  2. C++ Primer 第五版 第6章 6.7——函数指针习题答案
  3. mysql5.7.18压缩包下载_MySQL 5.7.18 解压版安装
  4. 一文让你掌握神经网络训练技巧
  5. 使用强大的 Mockito 来测试你的代码
  6. mysql and 和where_如何使用mysql查询where条件里的or和and
  7. java jsessionid 会话,如何使用JSESSIONID手动加载Java会话?
  8. Centos7 下部署yapi 详细教程
  9. 渗透测试入门21之Metasploit渗透测试常用流程
  10. socket编程实例_NIO之网络编程源码阅读