高頻面試題-請聊一下Spring中BeanFactory與FactoryBean的區別!

若是你的簡歷上這麼寫,熟練掌握Spring,並對Spring源碼有必定的看法(或者是讀過Spring源碼),那麼沒法避免的就是要問幾個問題。html

IOC的實現原理是什麼? AOP底層是如何實現的? 由於這些基本上都是面試必然要準備的題目,因此若是你能粗略的說上一些來,就可能會問一些Spring中使用到的接口,就好比今天咱們要說的BeanFactory和FactoryBean有什麼不同(區別)?git

若是你確實有些疑惑,那麼接着看下去吧。github

什麼是BeanFactory?

其實Spring的源碼中,固然不少知名技術的源碼也同樣,其中聲明的類、接口,亦或者變量,都是能憑藉英文看出大概的意思來的。面試

這個BeanFactory就是這樣,首先字面意思就是Bean工廠,再轉換一下思路,也就是個Bean容器了。post

先看源代碼,上圖!編碼

1.png

能夠看到BeanFactory是一個接口,它在Spring中是最基礎的接口之一了,做用就是定義獲取bean及bean的各類屬性,在源代碼中也能夠看出來,裏面有咱們在編碼過程當中經常使用到的getBean()方法。url

若是你看過一些Spring源碼,知道其中有一個XmlBeanFactory類,這個類被稱爲是IOC容器的基礎類,就是這麼一個基礎類其實也是基於這個BeanFactory接口來實現的,有興趣能夠去看看這個類的源碼;這裏建議使用IDEA中的Diagrams功能查看UML類圖來查看各種、接口之間的關係,更容易理解。spa

什麼是FactoryBean?

先讀一下字面意思,工廠Bean?.net

也能夠說成是個工廠Bean,它的職責是Spring提供給用戶的一種實例化bean的方式,固然,是要經過實現該接口才能夠。code

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

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

一種是經過配置文件來實例化。

可是這兩種方法都不夠靈活,若是你們還想多瞭解一下這兩種方式,還請多查閱一下資料和源碼。

總結一下

總結下來,其實BeanFactory和FactoryBean半毛錢關係都沒有,就是名字像,我依稀記得之前被問到的時候,仍是一臉懵逼,後來瞭解了之後,發現居然是這樣。

果真面試官纔是最有套路的,就是想看一下你是否是真正的去讀了一些源碼。

當被問這個問題時,只須要將兩種具體的職責,和爲Spring所作的貢獻講一講,基本上面試官就不會在這個問題上爲難你了。

 
若是你以爲這篇文章對你有點用的話,麻煩請給咱們的開源項目點點star:  http://github.crmeb.net/u/defu   不勝感激 !
來自 「開源世界 」 ,連接:  https://ym.baisou.ltd/post/733.html   ,如需轉載,請註明出處,不然將追究法律責任。 ​​​​​​
 
相關文章
相關標籤/搜索