面試官:談談你對IoC和AOP的理解吧
答:
IoC
What:
控制反轉(Inversion of Control,縮寫爲IoC),將創建類的控制權從程序交給IoC容器。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。
(
What簡單來說
原始類的創建模式就像做菜,你需要原材料:
- 食材:米油鹽醬醋,各種菜,肉類…
- 器材:熱源、鍋、碗筷…
- 方法:操控熱源的方法,食材的處理方法,刀具的使用,碗筷的使用…
- 這些都需要自己控制,很累,很麻煩
而IoC容器就像外賣,只要給了資源,所有需要的一切自動注入,直達家門。
)
Why:
原始方法當A依賴於B,B依賴於C,需要A時,必須先new一個C,然後new一個B,最後才能成功new一個A。 如果沒有IOC,在spring中,調用controller的方法,很有可能需要先new一個dao,再new一個service,最後才能使用controller的方法。而且迭代和維護起來耗時耗力。
有了它,解耦,利於維護,當需要更換dao的時候,我們只需要在配置文件中更換dao的實現類,完全不會破壞到之前的代碼。上層現在不需要知道下層是如何創建的。
(
Why簡單來說
老子掏錢省力了。
我們想換一家喫的時候直接選擇換一家就行,需要換菜品的時候也是直接換就行。
我們不需要知道如何做菜,如何送來,只要到了就行。
)
How:
一般IoC容器是啓動時根據依賴關係將所有的普通對象全部創建出來並放在容器中,是常駐內存的,除非配置爲啓動時配置爲懶加載,不創建對象。一旦啓動完成,幾乎所有用到的對象都已經創建完畢,使用時直接從容器中拿就是了,效率非常高。
(
How簡單來說
也就是說在有外賣機構前,商家已經存在纔行,註冊後外賣機構直接派單即可。
)
缺點:
1.對內存的要求比較高,並且在啓動時比較慢
2.創建對象的步驟不直觀
(
缺點簡單來說
1.城市要有地,商家要有實體店。
2.我們並不清楚菜到我們門口的原理。
)
面試官:我擦,說的挺好的,那AOP呢?
答:
AOP我們下回繼續
(
AOP簡單來說
所有飯店想在網上賺錢,就需要註冊到外賣機構,這就是AOP思想,統一控制。
)