❶ 有了面向對象的編程,為什麼需要面向切面的編程
面向切面的編程 主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。比如我們最常見的就是日誌記錄了,舉個例子,我們現在提供一個服務查詢學生信息的,但是我們希望記錄有誰進行了這個查詢。如果按照傳統的OOP的實現的話,那我們實現了一個查詢學生信息的服務介面(StudentInfoService)和其實現類(StudentInfoServiceImpl.java),同時為了要進行記錄的話,那我們在實現類(StudentInfoServiceImpl.java)中要添加其實現記錄的過程。這樣的話,假如我們要實現的服務有多個呢?那就要在每個實現的類都添加這些記錄過程。這樣做的話就會有點繁瑣,而且每個實現類都與記錄服務日誌的行為緊耦合,違反了面向對象的規則。那麼怎樣才能把記錄服務的行為與業務處理過程中分離出來呢?看起來好像就是查詢學生的服務自己在進行,但是背後日誌記錄對這些行為進行記錄,但是查詢學生的服務不知道存在這些記錄過程,這就是我們要討論AOP的目的所在。AOP的編程,好像就是把我們在某個方面的功能提出來與一批對象進行隔離,這樣與一批對象之間降低了耦合性,可以就某個功能進行編程。
❷ 面向切面編程和面向介面編程的區別
談談自己的理解吧:
面向切面編程:
手段:分離業務的主邏輯和次邏輯的一種思想。
目的:解決的是邏輯分離問題(主邏輯和次邏輯分開,其實主要是分離業務邏輯和非業務邏輯分開)。
案例:我們開發項目的時候基本都要去連接資料庫操作數據等,但是都會涉及到事務的提交,這時我們就用到了面向切面編程,我們在業務層只寫自己的業務邏輯,提交事務這一塊統一的動作我們就濃縮到了一塊兒統一處理,形象一點比喻就是我們做什麼事之前都以一個准備動作或結束動作的時候就把它統一起來,只關注我們要完成的事,這些准備動作統一完成!
類似的面向切面編程案例還有:系統日誌的記錄、請求的攔截等
面向介面編程:
手段:通過介面規約對象的屬性和方法,是面向對象一部分。
目的:統一標准問題,讓大家不至於各行其事而對代碼的可讀性造成影響(公用部分行為)。
案例:其實這個比較好解釋,就是有一件事,需要大家去完成,但是給你規定了完成的方式,你只能怎麼去做,這時我們當中任何一個人都能去完成這件事,只不過因人而異會有效率和風格的差異,但是都是按照事先的規定來的!比如:讓你去給資料庫添加一行數據返回受影響的行數,這里大家都去實現介面寫SQL,中間可能會有差異,但是最後都得返回一個int類型的受影響行數回來
大體意思就是說:介面給我們規定了完成一個任務的標准,但是具體過程不限制,任何人都能通過遵循的規定去完成這件事!這樣擴展性就很強!
個人水平有限,如果不滿意請參考:網頁鏈接
❸ 有了面向對象的編程,為什麼需要面向切面的編程,不是矛盾了嗎
你可能對面向對象的編程已經很熟悉了,目前面向對象的技術已經很流行。比起以前的面向過程,簡直是一種質的飛躍。既然有面向對象的編程的模式了,為什麼還要面向切面的思想呢?
面向對象的編程主要注重核心業務,而面向切面編程主要關注一些不是核心的業務,但又是必須的輔助功能,比如一個完整的系統中,記錄平時系統運行時拋出的異常,需要我們去記錄,以便我們對系統盡快的修復。這就是我們常用的日誌。如果對一些要求比較重要的數據操作,事務是不可少的,如金融系統,這樣的數據很重要,每步操作都很重要,我們就應該用到事務處理。這就是我們常用的事務處理。可根據你的系統數據的重要性,有選擇的應用。還用一個常用的就是安全驗證了,它也是常用的,對於不同的頁面,訪問的身份也不一樣。這就是我們常用的身份驗證。以上這些不是針對特定那個業務模塊的,可能針對所有的模塊。它們只是一些附加的功能,相對模塊的主功能而言。如果在每個模塊中都夾雜著這些不是核心業務的代碼,看起來與核心業務有點關系,但這樣處理,會對以後的維護比較頭疼。同時也違背了面向對象的一條原則,自己對自己負責。本不屬於這個方法的業務也放在了其中。這樣的代碼不僅難維護,重用性也不好,耦合度也比較大。內聚性也比較低。這樣的代碼眼前可能不會有什麼麻煩,但給後期的維護人員帶來了麻煩。
面向方面的編程主要是輔助核心業務的,它並不是核心業務,但它又是不可缺少的。我們可以這樣理解它與面向對象思想的聯合使用。其實面向方面編程就是把那些夾雜在核心業務方法裡面的代碼抽取出來並模塊化,把它們單獨看成一個模塊功能.來與核心業務共同完成比較完善的功能.
面向方面編程( Aspect-Oriented Programming,AOP)很早就出現了,它與spring的Ioc結合使用,更加體現了aop的強大功能所在.在講它與spring結合使用之前先說幾個難聽,難懂的概念.它為什麼不命名一些容易理解的概念了,因為aop很早就有人對它們命名了, 所以spring中講的aop也不例外.在jboss,AspectJ...中都有aop這個概念.概念都一樣的.看你怎樣理解和運用了.我們簡單的講一下常用的幾個概念.
第一個: 切面(Aspect),這是中文的翻譯,你可以把它翻譯成方面,一部分...關於它的翻譯太多,我們不關注這些,我們知道理解它是核心功能就OK了.切面簡單的理解就是把那些不是核心業務應該處理的代碼提取出來,進行封裝成模塊化.來處理那些附加的功能代碼.(如日誌,事務,安全驗證)我們把這個模塊的作用理解為一個切面,告訴我們它是一個功能模塊.我們可以把它看成一個切面.說白了就是我們寫一個類,在這個類中寫一些處理在核心業務中起到同樣效果的方法.這樣你應該明白了吧.專業的概念就是那麼難理解.
第二個:連接點(Joinpoint),簡單的理解就是在切面模塊中定義的方法.就是上面定義類中的方法.
第三個:切入點(Pointcut).就是連接點的集合,就是一組方法的集合了.
第四個:通知(Advice).簡單的理解就是告訴一個方法什麼時間觸發執行.把它看作一個條件判斷.判斷這個方法何時執行.
以下幾個就比較理解了,目標對象就是要處理的核心業務了.代理就更容易理解了,讓一個代理去完成這個任務
希望對你有幫助![SE_HuiHui]為你解答。
❹ 從頭認識Spring-1.2 什麼是AOP為什麼需要面向切面編程
面向切面變成能夠很大程度上較少代碼量,並且可以深入到方法內部,動態給方法添加功能,比如增加日誌的功能,設置前置功能,後置補充功能。Aop用到面向對象的編程中,簡直就是如虎添翼。這么方便的東西為什麼不使用呢?
舉個例子,你要給一個方法,添加動態添加段功能,比如說做前置校驗:
publicvoidtest(){
//code
}
如果你採用傳統方法,可能需要藉助動態代理來生成一個代理類,通過代理對象的invoke()方法利用反射原理給方法添加功能,但是這樣做的話,會很麻煩,並且很容易出錯。藉助於Aop,就可以直接定義一個切面,然後聲明一個切點,給方法動態添加了功能,並且不具有侵入性。
❺ 什麼是面向切面編程
Aspect Oriented Programming(AOP),面向切面編程,是一個比較熱門的話題。AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。比如我們最常見的就是日誌記錄了,舉個例子,我們現在提供一個查詢學生信息的服務,但是我們希望記錄有誰進行了這個查詢。如果按照傳統的OOP的實現的話,那我們實現了一個查詢學生信息的服務介面(StudentInfoService)和其實現 類 (StudentInfoServiceImpl.java),同時為了要進行記錄的話,那我們在實現類(StudentInfoServiceImpl.java)中要添加其實現記錄的過程。這樣的話,假如我們要實現的服務有多個呢?那就要在每個實現的類都添加這些記錄過程。這樣做的話就會有點繁瑣,而且每個實現類都與記錄服務日誌的行為緊耦合,違反了面向對象的規則。那麼怎樣才能把記錄服務的行為與業務處理過程中分離出來呢?看起來好像就是查詢學生的服務自己在進行,但卻是背後日誌記錄對這些行為進行記錄,並且查詢學生的服務不知道存在這些記錄過程,這就是我們要討論AOP的目的所在。AOP的編程,好像就是把我們在某個方面的功能提出來與一批對象進行隔離,這樣與一批對象之間降低了耦合性,可以就某個功能進行編程。
❻ 面向切面編程的簡介
Aspect Oriented Programming(AOP),面向切面編程,是一個比較熱門的話題。AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。比如我們最常見的就是日誌記錄了,舉個例子,我們現在提供一個服務查詢學生信息的,但是我們希望記錄有誰進行了這個查詢。如果按照傳統的OOP的實現的話,那我們實現了一個查詢學生信息的服務介面(StudentInfoService)和其實現類(StudentInfoServiceImpl.java),同時為了要進行記錄的話,那我們在實現類(StudentInfoServiceImpl.java)中要添加其實現記錄的過程。這樣的話,假如我們要實現的服務有多個呢?那就要在每個實現的類都添加這些記錄過程。這樣做的話就會有點繁瑣,而且每個實現類都與記錄服務日誌的行為緊耦合,違反了面向對象的規則。那麼怎樣才能把記錄服務的行為與業務處理過程中分離出來呢?看起來好像就是查詢學生的服務自己在進行,但卻是背後日誌記錄對這些行為進行記錄,並且查詢學生的服務不知道存在這些記錄過程,這就是我們要討論AOP的目的所在。AOP的編程,好像就是把我們在某個方面的功能提出來與一批對象進行隔離,這樣與一批對象之間降低了耦合性,可以就某個功能進行編程。
❼ Spring的AOP如何理解,在業務里的作用是什麼
有個簡單的理解,就是在別人做好的程序外面可以套一個程序,比如以前的程序員做完了一個方法A(),後來他離職或調走了,你也沒有源代碼,但現在業務要求在執行這個方法時要寫一個日誌信息,那麼你就用AOP來實現,實現AOP的某些介面,當方法A被執行的時候就會觸發你做的寫日誌的功能,類似資料庫的觸發器,這樣做的好處時原來做的方法A()不用做任何修改,它甚至不知道有這么回事,而你的程序又可以基於它的運行結果等實現你的功能需求,達到解耦的目的。
❽ 誰能解釋一下java面向切面編程的思想 以及具體的使用方式
面向切面編程(AOP),就是關注程序運行的過程,切面就是要把方法切開,分別執行前,執行中,執行後(可能更細化)等多個步驟,分別針對這三個階段進行處理。以獲得邏輯過程中各部分之間低耦合性的隔離效果。
具體使用場景:
事務管理:我們在操作資料庫的時候需要在操作前打開事務,結束後提交事務(或回滾事務),按往常的編碼方式,我們會在每個方法前、後都添加一些事務操作的重復的代碼,使得每個類都與事務操作相耦合;而使用了AOP,代碼上看上去就是直接操作的資料庫,而我們通過某種機制,可讓代碼在你不察覺的情況下進行了事務開啟和提交(或回滾),事實上Spring就提供了這種事務機制。
差不多的場景還有日誌的記錄
❾ 什麼是AOP、IOC他們的作用是什麼
什麼是IoC
Ioc—Inversion of Control,即「控制反轉」,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。如何理解好Ioc呢?理解好Ioc的關鍵是要明確「誰控制誰,控制什麼,為何是反轉(有反轉就應該有正轉了),哪些方面反轉了」,那我們來深入分析一下:
控制是什麼:傳統Java SE程序設計,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象;而IoC是有專門一個容器來創建這些對象,即由Ioc容器來控制對象的創建;誰控制誰?當然是IoC 容器控制了對象;控制什麼?那就是主要控制了外部資源獲取(不只是對象包括比如文件等)。
為何是反轉,哪些方面反轉了:有反轉就有正轉,傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙創建及注入依賴對象;為何是反轉?因為由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;哪些方面反轉了?依賴對象的獲取被反轉了。
IoC能做什麼
IoC不是一種技術,只是一種思想,一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合、更優良的程序。傳統應用程序都是由我們在類內部主動創建依賴對象,從而導致類與類之間高耦合,難於測試;有了IoC容器後,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是鬆散耦合,這樣也方便測試,利於功能復用,更重要的是使得程序的整個體系結構變得非常靈活。
其實IoC對編程帶來的最大改變不是從代碼上,而是從思想上,發生了「主從換位」的變化。應用程序原本是老大,要獲取什麼資源都是主動出擊,但是在IoC/DI思想中,應用程序就變成被動的了,被動的等待IoC容器來創建並注入它所需要的資源了。
IoC和DI
DI—Dependency Injection,即「依賴注入」:是組件之間依賴關系由容器在運行期決定,形象的說,即由容器動態的將某個依賴關系注入到組件之中。依賴注入的目的並非為軟體系統帶來更多功能,而是為了提升組件重用的頻率,並為系統搭建一個靈活、可擴展的平台。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。
註:如果想要更加深入的了解IoC和DI,請參考大師級人物Martin Fowler的一篇經典文章《Inversion of Control Containers and the Dependency Injection pattern》,原文地址:http://www.martinfowler.com/articles/injection.html。
AOP:面向切面編程
什麼是AOP:
概念:在軟體業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。(網路)
簡單的說:就是將程序中重復的代碼抽取出來,在需要執行的時候,使用動態代理的技術,在不修改源碼的基礎上,對我們的已有方法進行增強。
AOP的作用和優勢:
作用:從定義中來看,就是為了在程序運行期間,不修改源碼對已有方法進行增強。
優勢:減少重復代碼 提交了開發效率 維護方便
實現方式: 就是動態代理的技術
具體的作用:實現事務的控制 日誌 和 安全模塊
想系統的學習編程可以來我這看看,希望對您有所幫助!~
❿ 什麼是aop,aop的作用是什麼
aop是面向切面的編程。 它可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。 如果您學習Java的話,會在Spring中經常用到,那是你更能領悟它!