前言:這幾天的面試,感覺自己對spring 的整個掌握還是很薄弱。所以需要繼續加強。 這裡說明一下spring的這幾個面試題,但是實際的感覺還是不對的,這種問題我認為需要真正讀了spring的源碼後說出來的東西才有意義。這種面試的問法,也只能是面試的問法,對實際的掌握還是沒有絲毫意義的。所以我認為 ...
前言:這幾天的面試,感覺自己對spring 的整個掌握還是很薄弱。所以需要繼續加強。
這裡說明一下spring的這幾個面試題,但是實際的感覺還是不對的,這種問題我認為需要真正讀了spring的源碼後說出來的東西才有意義。這種面試的問法,也只能是面試的問法,對實際的掌握還是沒有絲毫意義的。所以我認為 有機會一定要讀下spring的源碼 來過一遍 具體實現,這樣的才是有意義的做法。同意的請舉手。
這裡說明一下這三個spring 面試問題:
1、回客科技 面試的 實現ioc 容器用到的技術
第1種 說法:
IoC則是一種 軟體設計模式,簡單來說Spring通過工廠+反射來實現IoC。
原理簡單說明:
其實就是通過解析xml文件,通過反射創建出我們所需要的bean,再將這些bean挨個放到集合中,然後對外提供一個getBean()方法,以便我們獲得這bean。
第2種 說法:
參考:https://blog.csdn.net/zhanghaor/article/details/73431021
使用的主要知識點:
dom4j解析xml文件
xpath表達式(用於解析xml中的標簽)
java反射機制
內省(獲取Bean屬性的set方法進行賦值)
第3種 說法
IOC/DI使用到的技術
1. JDOM:JDOM是對xml文件進行解析的技術,Spring的配置文件applicationContext.xml就是由JDOM進行解析的,它可以提取出xml文件中定義的標簽和屬性值。
2. 反射機制:對配置文件中的類名使用反射機制可以實現類載入初始化等工作,也可以調用類的方法進行屬性註入,java.lang.reflect提供了反射相關的工具
2:簡述BeanFactory的實現原理
這裡是cp的代碼,為什麼cp 是因為 這幾句關鍵的東西需要我記住的。
先來看看Java代碼獲取Spring中Bean的代碼(一共有五種方式,這裡只展示其中一種方法):
有沒有發現上面的代碼與利用反射實現工廠模式的代碼很相似。對,你沒有看錯,Spring中的BeanFactory用到的就是簡單工廠模式。
現在的思路就更加清晰了,要想實現Spring中的BeanFactory,無非就用到了以下幾個技術:
1.使用簡單工廠模式來處理bean容器。
2.解析xml文件,獲取配置中的元素信息。
3.利用反射獲實例化配置信息中的對象。
4.如果有對象註入,使用invoke()方法。
5.實例化的對象放入bean容器中,並提供getBean方法。
通過以上步驟就實現了spring的BeanFactory功能,只要在配置文件中配置好,實例化對象的事情交給BeanFactory來實現,用戶不需要通過new對象的方式實例化對象,直接調用getBean方法即獲取對象實例。
3、大搜車面試的 spring 怎麼實現的依賴註入(DI)
參考博客:http://blog.163.com/qqabc20082006@126/blog/static/2292852520091125112112902/
在Spring容器中為一個bean配置依賴註入有三種方式:
· 使用屬性的setter方法註入 這是最常用的方式;
· 使用構造器註入;
· 使用Filed註入(用於註解方式).
感謝 以上博客代碼分享人,目前沒有時間讀源碼,只能先記住了。面試還是需要應付一下的~~