高頻面試題-請聊一下Spring中BeanFactory與FactoryBean的區(qū)別

如果你的簡歷上這么寫,`熟練掌握Spring,并對Spring源碼有一定的見解(或者是讀過Spring源碼)`,那么無法避免的就是要問幾個問題。

IOC的實現(xiàn)原理是什么??

AOP底層是如何實現(xiàn)的?

因為這些基本上都是面試必然要準備的題目,所以如果你能粗略的說上一些來,就可能會問一些Spring中使用到的接口,就比如今天我們要說的BeanFactory和FactoryBean有什么不一樣(區(qū)別)?

如果你確實有些疑惑,那么接著看下去吧。

## 什么是BeanFactory?

其實Spring的源碼中,當然很多知名技術(shù)的源碼也一樣,其中聲明的類、接口,亦或者變量,都是能憑借英文看出大概的意思來的。這個BeanFactory就是這樣,首先字面意思就是Bean工廠,再轉(zhuǎn)換一下思路,也就是個Bean容器了。

先看源代碼,上圖!

![1.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9b629966721470e9de1f9ded1435e24~tplv-k3u1fbpfcp-watermark.image)

可以看到BeanFactory是一個接口,它在Spring中是最基礎(chǔ)的接口之一了,作用就是定義獲取bean及bean的各種屬性,在源代碼中也可以看出來,里面有我們在編碼過程中常用到的getBean()方法。

如果你看過一些Spring源碼,知道其中有一個XmlBeanFactory類,這個類被稱為是IOC容器的基礎(chǔ)類,就是這么一個基礎(chǔ)類其實也是基于這個BeanFactory接口來實現(xiàn)的,有興趣可以去看看這個類的源碼;這里建議使用IDEA中的Diagrams功能查看UML類圖來查看各類、接口之間的關(guān)系,更容易理解。

## 什么是FactoryBean?

先讀一下字面意思,工廠Bean?也可以說成是個工廠Bean,它的職責是Spring提供給用戶的一種實例化bean的方式,當然,是要通過實現(xiàn)該接口才可以。

這里還要說一下,其實Spring還有其他兩種實例化bean的方式。

一種是通過反射來利用獲取bean的class屬性,通過其class屬性實例化具體的bean。一種是通過配置文件來實例化。

但是這兩種方法都不夠靈活,如果大家還想多了解一下這兩種方式,還請多查閱一下資料和源碼。

## 總結(jié)一下

總結(jié)下來,其實BeanFactory和FactoryBean半毛錢關(guān)系都沒有,就是名字像,我依稀記得以前被問到的時候,還是一臉懵逼,后來了解了以后,發(fā)現(xiàn)竟然是這樣。

果然面試官才是最有套路的,就是想看一下你是不是真正的去讀了一些源碼。當被問這個問題時,只需要將兩種具體的職責,和為Spring所做的貢獻講一講,基本上面試官就不會在這個問題上為難你了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容