SpringIOC和AOP原理詳解
IoC(Inversion of Control)
# (1) . IoC(Inversion of Control)是指容器控製程式物件之間的關係,而不是傳統實作中,由程式碼直接操控。控制權由應用程式碼中轉到了外部容器,控制權的轉移是所謂反轉。對Spring而言,就是由Spring來控制物件的生命週期和物件之間的關係;IoC還有另一個名字-「依賴注入(Dependency Injection)」。從名字上理解,所謂依賴注入,即組件之間的依賴關係由容器在運行期決定,即由容器動態地將某種依賴關係注入到組件之中。
(2). 在Spring的工作方式中,所有的類別都會在spring容器中登記,告訴spring這是個什麼東西,你需要什麼東西,然後spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類別的創建、銷毀都由 spring來控制,也就是說控制對像生存週期的不再是引用它的對象,而是spring。對於某個特定的對象而言,以前是它控制其他對象,現在是所有對像都被spring控制,所以這叫控制反轉。
(3). 在系統運作中,動態的向某個物件提供它所需要的其他物件。
(4). 依賴注入的想法是透過反射機制實現的,在實例化一個類別時,它透過反射呼叫類別中set方法將事先保存在HashMap中的類別屬性注入到類別中。總而言之,在傳統的物件創建方式中,通常由呼叫者來創建被呼叫者的實例,而在Spring中創建被呼叫者的工作由Spring來完成,然後注入呼叫者,即所謂的依賴注入or控制反轉。注入方式有兩種:依賴注入和設定注入; IoC的優點:降低了元件之間的耦合,降低了業務物件之間替換的複雜性,使其能夠靈活的管理對象。
AOP(Aspect Oriented Programming)
(1). AOP面向方面程式設計基於IoC,是對OOP的有益補充;
#(2 ). AOP利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了多個類別的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同調用的邏輯或責任封裝起來,比如日誌記錄,便於減少系統的重複代碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
(3). AOP代表的是一個橫向的關係,將「物件」比作一個空心的圓柱體,其中封裝的是物件的屬性和行為;則面向方面編程的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業務邏輯。而 剖開的切面,也就是所謂的「面向」了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡,但完成了效果。
(4). 實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用截取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行;二是採用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的程式碼。
(5). Spring實現AOP:JDK動態代理和CGLIB代理JDK動態代理:其代理對象必須是某個接口的實現,它是通過在運行期間創建一個接口的實現類來完成對目標物件的代理;其核心的兩個類別是InvocationHandler和Proxy。 CGLIB代理:實作原理類似JDK動態代理,只是它在運行期間產生的代理物件是針對目標類別擴展的子類別。 CGLIB是高效的程式碼產生包,底層是依靠ASM(開源的java字節碼編輯類別庫)操作字節碼實現的,性能比JDK強;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ註解驅動的切面實際上底層也是透過動態代理實現的。
(6)。
##Context passing 內容傳遞##==
Debugging 調試#
Persistence 持久化
Resource pooling 資源池
Synf
Java教學
以上是Spring IoC和AOP原理詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!