這是我參與更文挑戰的第6天,活動詳情查看: 更文挑戰面試
若是你的簡歷上這麼寫,熟練掌握Spring,並對Spring源碼有必定的看法(或者是讀過Spring源碼)
,那麼沒法避免的就是要問幾個問題。markdown
IOC的實現原理是什麼? AOP底層是如何實現的? 由於這些基本上都是面試必然要準備的題目,因此若是你能粗略的說上一些來,就可能會問一些Spring中使用到的接口,就好比今天咱們要說的BeanFactory和FactoryBean有什麼不同(區別)?post
若是你確實有些疑惑,那麼接着看下去吧。編碼
其實Spring的源碼中,固然不少知名技術的源碼也同樣,其中聲明的類、接口,亦或者變量,都是能憑藉英文看出大概的意思來的。spa
這個BeanFactory就是這樣,首先字面意思就是Bean工廠,再轉換一下思路,也就是個Bean容器了。code
先看源代碼,上圖!orm
能夠看到BeanFactory是一個接口,它在Spring中是最基礎的接口之一了,做用就是定義獲取bean及bean的各類屬性,在源代碼中也能夠看出來,裏面有咱們在編碼過程當中經常使用到的getBean()方法。接口
若是你看過一些Spring源碼,知道其中有一個XmlBeanFactory類,這個類被稱爲是IOC容器的基礎類,就是這麼一個基礎類其實也是基於這個BeanFactory接口來實現的,有興趣能夠去看看這個類的源碼;這裏建議使用IDEA中的Diagrams功能查看UML類圖來查看各種、接口之間的關係,更容易理解。get
先讀一下字面意思,工廠Bean?源碼
也能夠說成是個工廠Bean,它的職責是Spring提供給用戶的一種實例化bean的方式,固然,是要經過實現該接口才能夠。
這裏還要說一下,其實Spring還有其餘兩種實例化bean的方式。
一種是經過反射來利用獲取bean的class屬性,經過其class屬性實例化具體的bean。
一種是經過配置文件來實例化。
可是這兩種方法都不夠靈活,若是你們還想多瞭解一下這兩種方式,還請多查閱一下資料和源碼。
總結下來,其實BeanFactory和FactoryBean半毛錢關係都沒有,就是名字像,我依稀記得之前被問到的時候,仍是一臉懵逼,後來瞭解了之後,發現居然是這樣。
果真面試官纔是最有套路的,就是想看一下你是否是真正的去讀了一些源碼。
當被問這個問題時,只須要將兩種具體的職責,和爲Spring所作的貢獻講一講,基本上面試官就不會在這個問題上爲難你了。
各位,加油,喜歡就點個贊,贊,贊,贊,贊,贊。