BeanFactory是Spring中提供的一个工厂,可以产生对象,最常用的API就是getBean(),可以通过be-anName或者Bean的类型(Class)得到一个Bean。FactoryBean则是一个Bean。

如果一个类实现了FactoryBean,那么Spring容器中存在两个对象,一个是getObject()返回的对象,还有一个是当前对象。

如果需要通过BeanFactory的getBean方法来获取FactoryBean本身,必须在beanName前面拼接上“&”,如果不拼接,实际获得的是getObject()方法所返回的对象。

什么时候使用FactoryBean?

当构造的对象依赖关系非常复杂的时候可以使用FactoryBean来构造它们。经典的应用场景例如My Batis的MapperFactoryBean。

代码示例

public class CustomizedFactoryBean implements FactoryBean<CustomizedFactoryBean.CreatedByFactoryBean> {@Overridepublic CreatedByFactoryBean getObject() throws Exception {return new CreatedByFactoryBean();}@Overridepublic Class<?> getObjectType() {return CreatedByFactoryBean.class;}class CreatedByFactoryBean{}public static void main(String[] args) {//AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.register(CustomizedFactoryBean.class);context.refresh();CreatedByFactoryBean createdByFactoryBean = context.getBean("customizedFactoryBean",CreatedByFactoryBean.class);System.out.println("如果未拼接&,实际得到的FactoryBean实例的getObject方法所返回的Bean: " + createdByFactoryBean);CustomizedFactoryBean factoryBean = context.getBean("&customizedFactoryBean", CustomizedFactoryBean.class);System.out.println("如果拼接&,才能FactoryBean本身: " +factoryBean);}
}

运行结果:

BeanFactory和FactoryBean区别相关推荐

  1. factorybean 声明_阿里面试题:BeanFactory与FactoryBean的区别

    作者:至尊宝 来源:cnblogs.com/aspirant/p/9082858.html BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的 ...

  2. Spring源码分析-从源码看BeanFactory和FactoryBean的区别

    导语   在使用Spring 中最为核心的操作就是Bean的创建以及使用.下面就来带着大家一起来分析一下关于Spring的Bean的加载相关的知识 文章目录 BeanFactory getBean方法 ...

  3. BeanFactory和FactoryBean的区别

    区别:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean.在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管 ...

  4. Spring 的 BeanFactory 和 FactoryBean 傻傻分不清?

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  5. Bean、BeanDefinition、BeanFactory、FactoryBean

    Bean 1.bean的定义格式: <bean id="" class=""></bean> 2.Bean对象在Spring实现中是以B ...

  6. Spring5源码 - 08 BeanFactory和FactoryBean 源码解析 使用场景

    文章目录 BeanFactory VS FactoryBean FactoryBean VS 普通Bean 演示 源码 使用场景 BeanFactory VS FactoryBean 首先明确一下,这 ...

  7. Spring的BeanFactory和FactoryBean

    博客迁移了.麻烦去新地址查看. Spring的BeanFactory和FactoryBean 链接地址:http://www.msyy233.com/posts/17047.html#more

  8. 浅谈Spring中的BeanFactory与FactoryBean

    前言 理解FactoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象,不仅如此,而且对理解Mybatis核心源码也非常有帮助!如 ...

  9. Spring中 BeanFactory 与 FactoryBean 的区别

    作者:叁滴水 blog.csdn.net/qq_30285985/article/details/115433099 文章目录 前言 为什么会有FactoryBean? 通过源码深入学习Factory ...

  10. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

    1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂.在Spring中,BeanFactory是IOC容器的核心接口,它的 ...

最新文章

  1. 李铁:《非诚勿扰》与虚弱的中国人——写的太好了
  2. WP7页面的数值传递和对象传递
  3. Winfrom实现圆角设计
  4. kmp算法 php,漫画KMP算法-程序员小灰
  5. 一个核物理学霸为何两次收到BlackHat的邀请
  6. java restful返回json_java 调用接口的时候报的错 用的是restful的post方式,请求返回的是json...
  7. BP神经网络python代码详细解答(来自原文)
  8. JAVA计算机毕业设计随心淘网管理系统源码+系统+mysql数据库+lw文档
  9. jsp在线预览Word文档操作步骤(自己测试的)
  10. swiper / 移动端触摸滑动插件 / 手机轮播插件
  11. 图形界面上的任意形状图形按钮
  12. Java面试题精选四(oracle、mysql数据库)
  13. in not 效率太慢_[笔记] SQL性能优化 - 避免使用 IN 和 NOT IN
  14. Go字符串拼接方式深入比较
  15. js 数据类型之字符串
  16. 微信小程序:九宫格抽奖
  17. Java返回报文有单双引号_Spring MVC 响应结果有反斜杠转义字符+双引号
  18. Python与图像处理7
  19. 什么是mysql的慢查询,看完你就懂了
  20. Phind-面向程序员的AI聊天对话机器人

热门文章

  1. 织梦错误mynews.lib.php on line 40,织梦错误Fatal error: Using $this when not in object context...
  2. MATLAB--二分法
  3. 全国二级c语言公共基础知识,全国计算机二级C语言及公共基础知识复习资料
  4. tron区块链php对接,兄弟连区块链入门到精通教程基础开发通过接口查询tron提币情况...
  5. 容器技术Docker K8s 24 容器服务ACK基础与进阶-日志管理
  6. MLOps- 吴恩达Andrew Ng Overview of the ML Lifecycle and Deployment Week1 部署深度学习模型model 实现作业
  7. 3.1 广义线性模型 And XGBoost
  8. 123.买卖股票的最佳时机III
  9. 编程实现二叉树的遍历
  10. centos7查看当前系统时间、_CentOS 7修改系统时间及硬件时间