根據(jù)運行的環(huán)境,操作系統(tǒng)可以分為桌面操作系統(tǒng),手機操作系統(tǒng),服務(wù)器操作系統(tǒng),嵌入式操作系統(tǒng)等。 過濾器和攔截器之間的區(qū)別在于,在Java Web中,傳入的請求和響應(yīng)會預(yù)先過濾掉一些信息,或者預(yù)先設(shè)置一些參數(shù),然后將servlet或struts的動作傳遞給業(yè)務(wù)邏輯,例如,在進入servlet或struts動作之前,過濾掉非法URL(不是login.do地址請求,如果用戶未登錄,則過濾掉),或者統(tǒng)一設(shè)置字符集,或者刪除一些非法字符,面向方面的編程是在服務(wù)或方法之前調(diào)用方法,或在方法之后調(diào)用方法. 例如,動態(tài)代理是的簡單實現(xiàn),它在調(diào)用方法Operation之前先打印出字符串(或其他業(yè)務(wù)邏輯),也可以在調(diào)用方法后打印出字符串,甚至進行業(yè)務(wù)處理. 引發(fā)異常時的邏輯運算. 和過濾器之間的區(qū)別: 1.基于java的反射機制,過濾器基于函數(shù)回調(diào). 2.不依賴于servlet容器,過濾器依賴于servlet容器. 3.只能對動作請求起作用,而過濾器可以對幾乎所有請求起作用. 4.可以訪問操作上下文和值堆棧中的對象,但過濾器不能. 5. 在動作生命周期中,可以多次調(diào)用,并且在初始化容器時只能調(diào)用一次過濾器. 執(zhí)行順序: 過濾前-攔截前-動作處理-攔截后-過濾. 個人認為過濾是一個水平過程. 首先,對客戶端提交的內(nèi)容進行過濾(例如,未登錄的用戶無法訪問內(nèi)部頁面);過濾器通過后,將檢查用戶提交的數(shù)據(jù)的驗證并進行一些初步的數(shù)據(jù)處理和過濾器的區(qū)別,然后將處理后的數(shù)據(jù)發(fā)送給相應(yīng)的Action;在完成Action處理并返回之后,還可以執(zhí)行其他處理(尚未考慮要做什么),然后返回到過濾器的后續(xù)操作. 面向方面的編程(AOP是“面向方面的程序”的首字母縮寫),我們知道面向?qū)ο蟮墓δ苁抢^承,多態(tài)性和封裝. 封裝要求將功能分散到不同的對象中,這在軟件設(shè)計中通常稱為職責分配. 實際上,讓不同的類設(shè)計不同的方法. 這樣,代碼便分散到各個類中. 這樣做的好處是,它減少了代碼的復(fù)雜性并使類可重用. 但是人們還發(fā)現(xiàn),在分散代碼的同時,還增加了代碼的重復(fù)性. 這意味著什么?例如,我們可能需要登錄兩個類中的每個方法. 根據(jù)面向?qū)ο蟮脑O(shè)計方法,必須將日志的內(nèi)容添加到兩個類的方法中. 也許它們是完全一樣的,但這是因為面向?qū)ο蟮脑O(shè)計使得不可能將類連接到類,并且不可能統(tǒng)一這些重復(fù)的代碼. 有人可能會說它很容易處理,我們可以在一個單獨的類中的一個單獨方法中編寫此代碼,然后在這兩個類中對其進行調(diào)用. 但是,通過這種方式,這兩個類與上面提到的獨立類結(jié)合使用,它們的更改將影響這兩個類. 那么,有什么方法可以讓我們在需要時隨意添加代碼?這種在運行時將代碼動態(tài)地切入指定方法和類位置的編程思想是面向方面的編程. 通常,我們切入指定類的指定方法的代碼片段稱為切面,以及將哪些類和方法切入切點. 使用AOP,我們可以將幾個類共有的代碼提取為一個切片,然后在需要時切入對象,從而更改其原始行為. 這樣,AOP實際上只是對OOP的補充. OOP從水平方向區(qū)分每個類和過濾器的區(qū)別,而AOP從垂直方向?qū)⑻囟ùa添加到對象. 有了AOP,OOP就變成了三維. 如果添加了時間維度,則AOP會將OOP從二維更改為三維,從平面更改為三維. 從技術(shù)上講,AOP基本上是通過代理機制實現(xiàn)的. 可以說AOP是編程歷史上的一個里程碑,它是對OOP編程的非常有用的補充.
|
溫馨提示:喜歡本站的話,請收藏一下本站!