Java面試知識點(八十一)Spring的IOC和AOP概念和實現原理

一、IOC(Inverse of Control)控制反轉

1.依賴注入DI(dependency injection)

所謂依賴,從程序的角度看,就是比如 A 要調用 B 的方法,那麼 A 就依賴於 B,反正 A 要用到 B,則 A 依賴於 B。所謂倒置,你必須理解如果不倒置,會怎麼着,因爲 A 必須要有 B,纔可以調用 B,如果不倒置,意思就是 A 主動獲取 B 的實例:B b = new B (),這就是最簡單的獲取 B 實例的方法(當然還有各種設計模式可以幫助你去獲得 B 的實例,比如工廠、Locator 等等),然後你就可以調用 b 對象了。所以,不倒置,意味着 A 要主動獲取 B,才能使用 B;到了這裏,就應該明白了倒置的意思了。倒置就是 A 要調用 B 的話,A 並不需要主動獲取 B,而是由其它人自動將 B 送上門來。


2.IOC思想

java 程序中的每個業務邏輯至少需要兩個或以上的對象來協作完成,通常,在使用其他的合作對象時,均要使用像 new object() 這樣的語法來完成合作對象的申請工作。你會發現:對象間的耦合度高了。而 IOC 的思想是:**Spring 容器來實現這些相互依賴對象的創建、協調工作。對象只需要關心業務邏輯本身就可以了。**從這方面來說,對象如何得到他的協作對象的責任被反轉了(IOC、DI)。

IOC和DI是代表的含義是類似的


3.spring的容器

在 Spring 容器啓動的時候,Spring 會把你在 application.xml 中配置好的 bean 都初始化,在你需要調用的時候,把已經初始化的 bean 分配給你要調用這些 bean 的類,而不用去創建一個對象的實例。

Ioc 的常見容器是:ApplicationContext 和 BeanFactory


4.IOC 是基於 java 的反射機制以及工廠模式實現的


二、AOP(面向切面編程)

1.分離關注點

面向切面編程的目的是分離關注點,通俗的說是指使用 aop 你可以一心關注你的正事,而其他的事交給別人處理

AOP (面向切面編程) 技術利用一種稱爲 “橫切” 的技術,解剖封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,這樣就能減少系統的重複代碼,降低模塊間的耦合度,並有利於未來的可操作性和可維護性。


2.橫切關注點

AOP 把軟件系統分爲兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發生在覈心關注點的多處,而各處都基本相似。比如權限認證、日誌、事務處理。

比如提供的事務管理機制,事務管理就是一個關注點,你的正事就是去訪問數據庫(核心關注點),而你不想管事務(橫切關注點),所以,Spring 在你訪問數據庫之前,自動幫你開啓事務,當你訪問數據庫結束之後,自動幫你提交 / 回滾事務!


3.aop採用的技術

一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;

二是採用靜態織入的方式,引入特定的語法創建 “方面”,從而使得編譯器可以在編譯期間織入有關 “方面” 的代碼。這裏靜態織入的原理就是在編譯期間,切面直接以字節碼形式編譯到目標字節碼中


相關技術:

Java面試知識點(六十三)Java反射

Java面試知識點(七十八)設計模式之工廠模式

Java面試知識點(七十九)設計模式之代理模式(上)

Java面試知識點(八十)設計模式之代理模式(下)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章