高频面试题-请聊一下Spring中BeanFactory与FactoryBean的区别!
如果你的简历上这么写,熟练掌握Spring,并对Spring源码有一定的见解(或者是读过Spring源码)
,那么无法避免的就是要问几个问题。
IOC的实现原理是什么? AOP底层是如何实现的? 因为这些基本上都是面试必然要准备的题目,所以如果你能粗略的说上一些来,就可能会问一些Spring中使用到的接口,就比如今天我们要说的BeanFactory和FactoryBean有什么不一样(区别)?
如果你确实有些疑惑,那么接着看下去吧。
什么是BeanFactory?
其实Spring的源码中,当然很多知名技术的源码也一样,其中声明的类、接口,亦或者变量,都是能凭借英文看出大概的意思来的。
这个BeanFactory就是这样,首先字面意思就是Bean工厂,再转换一下思路,也就是个Bean容器了。
先看源代码,上图!
可以看到BeanFactory是一个接口,它在Spring中是最基础的接口之一了,作用就是定义获取bean及bean的各种属性,在源代码中也可以看出来,里面有我们在编码过程中常用到的getBean()方法。
如果你看过一些Spring源码,知道其中有一个XmlBeanFactory类,这个类被称为是IOC容器的基础类,就是这么一个基础类其实也是基于这个BeanFactory接口来实现的,有兴趣可以去看看这个类的源码;这里建议使用IDEA中的Diagrams功能查看UML类图来查看各类、接口之间的关系,更容易理解。
什么是FactoryBean?
先读一下字面意思,工厂Bean?
也可以说成是个工厂Bean,它的职责是Spring提供给用户的一种实例化bean的方式,当然,是要通过实现该接口才可以。
这里还要说一下,其实Spring还有其他两种实例化bean的方式。
一种是通过反射来利用获取bean的class属性,通过其class属性实例化具体的bean。
一种是通过配置文件来实例化。
但是这两种方法都不够灵活,如果大家还想多了解一下这两种方式,还请多查阅一下资料和源码。
总结一下
总结下来,其实BeanFactory和FactoryBean半毛钱关系都没有,就是名字像,我依稀记得以前被问到的时候,还是一脸懵逼,后来了解了以后,发现竟然是这样。
果然面试官才是最有套路的,就是想看一下你是不是真正的去读了一些源码。
当被问这个问题时,只需要将两种具体的职责,和为Spring所做的贡献讲一讲,基本上面试官就不会在这个问题上为难你了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
🏆Java技术专题-JVM研究系列(36) 性能调优之CMS垃圾回收器(上)
前提概要 如果没有冬天,春天不会如此悦人;如果没有偶尔的不幸,幸运不会如此受人欢迎。 CMS垃圾回收的6个重要阶段 initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 concurrent-mark并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中,[从新生代晋升或新分配或被更新的对象]。通过并发地重新扫描这些对象,预清理阶段可以减少下一个stop-the-world 重新标记阶段的工作量。 concurrent-abortable-preclean,并发可中止的预清理阶段。这个阶段其实跟上一个阶段做的东西一样,也是为了减少下一个STW重新标记阶段的工作量。增加这一阶段是为了让我们可以控制这个阶段的结束时机,比如扫描多长时间(默认5秒)或者Eden区使用占比达到期望比例(默认50%)就结束本阶段。 remark重标记阶段(CMS的第二个STW阶段),暂停所有用...
- 下一篇
funadmin v1.2.1 发布,后台管理系统
funadmin v1.2.1 已经发布,后台管理系统。 此版本更新内容包括: 修复console 页面添加菜单的接口 增加插件离线安装 修复插件前台模板配置 修复require-table getids函数错误 详情查看:https://gitee.com/funadmin/funadmin/releases/v1.2.1
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程