摘要:與的全稱是面向方面編程,這是于年在提出的一個術(shù)語。這兒將與面向?qū)ο缶幊滔啾容^。這行代碼的關(guān)注點,即方面,就是用戶合法性校驗。橫切性問題的目標是將橫切行的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。
AOP
AOP這一術(shù)語,近些年越發(fā)流行了。在java開發(fā)者社區(qū)里,學(xué)習(xí)使用Spring開發(fā)框架時,必定會涉及到AOP。不了解AOP不影響學(xué)習(xí)和使用Spring框架,不過在了解AOP之后,對于開發(fā)企業(yè)級應(yīng)用則更加有利。本文視圖以通俗的方式,整理一下AOP知識,以供初次接觸的同行參考。
AOP與OOPAOP的全稱是 面向方面編程 (Aspect-Oriented Programming),這是Gregor Kiczales于1996年在PARC提出的一個術(shù)語。AOP是一種與OOP截然不同的看待應(yīng)用程序結(jié)構(gòu)的方式,按照AOP的觀念,系統(tǒng)被分解為方面(aspect)或者關(guān)注點(concern),而不是對象。
這兒將AOP與OOP(面向?qū)ο缶幊?Object-Oriented Programming)相比較。Java開發(fā)者一般都比較熟悉OOP,大家都知道,OOP方式帶來的最大好處就是代碼復(fù)用,通過三大特性:封裝、繼承、多態(tài),來復(fù)用代碼。不過,若與AOP相比較,OOP的代碼復(fù)用成程度,還差了那么一點兒。
代碼復(fù)用一般情況下,OOP能夠很好地避免代碼重復(fù)。具體繼承可以幫助我們在不同類型之間共享相同的行為,多態(tài)可以讓我們可以用相同的方式處理不同類型的對象,將注意力集中到它們的共同之處。但是,有些時候,我們無法用OOP避免代碼重復(fù),或者無法用OOP得到一個優(yōu)雅的解決方案。
舉一個很簡單的栗子,假設(shè)我們有一個類,類里有一個公開方法是用來驗證用戶合法性的。那么這個公開方法,必然會其它很多類里被調(diào)用,而且調(diào)用方式都一樣,偽代碼如下ConcreteClassInstance.auth(userInstance)。雖然重復(fù)的地方只是這一行,但這種代碼將毫無規(guī)律地散布在整個對象模型中,造成無法避免代碼的重復(fù)。
這行代碼的關(guān)注點,即方面,就是用戶合法性校驗。采用AOP的話,我們可以達到這樣的效果:僅在一個地方聲明:當(dāng)某某條件發(fā)生時,進行用戶合法性校驗。權(quán)威一點的解釋就是:我們可以多帶帶編寫用戶和合法性校驗的代碼,將其包裝成一個方面(aspect),然后我們可以告訴AOP實現(xiàn)產(chǎn)品,如何在將方面織入(weave)到程序流程之中。具體的織入策略也有好幾種,比如:代碼生成和預(yù)編譯,動態(tài)字節(jié)碼生成、JavaEE的動態(tài)代理。
橫切性問題AOP的目標是將橫切行(crosscutting)的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。什么是橫切性問題?即一個關(guān)注點(比如用戶合法性檢查)的實現(xiàn)代碼,散落在很多個類或方法之中。很多企業(yè)級問題都具有橫切性,比如事物管理、安全性、資源相關(guān)操作。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68039.html
摘要:入門篇學(xué)習(xí)總結(jié)時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計,安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個人學(xué)習(xí)源碼:https://git...
摘要:官方在文檔沒有提供完整的但我們還是可以在單元測試中找得到的用法。解決的問題是分散在引用各處的橫切關(guān)注點。橫切關(guān)注點指的是分布于應(yīng)用中多處的功能,譬如日志,事務(wù)和安全。通過將真正執(zhí)行操作的對象委托給實現(xiàn)了能提供許多功能。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/e13...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進...
摘要:是一種特殊的增強切面切面由切點和增強通知組成,它既包括了橫切邏輯的定義也包括了連接點的定義。實際上,一個的實現(xiàn)被拆分到多個類中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因為我們要 前言 只有光頭才能變強 上一篇已經(jīng)講解了Spring IOC知識點一網(wǎng)打盡!,這篇主要是講解Spring的AOP模塊~ 之前我已經(jīng)寫過一篇關(guān)于AOP的文章了,那篇把比較重要的知...
摘要:構(gòu)造函數(shù)注入通過調(diào)用類的構(gòu)造函數(shù),將接口實現(xiàn)類通過構(gòu)造函數(shù)變量傳入。而在中,其使用橫切技術(shù),將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為。 最近實習(xí)用到Spring的開發(fā)框架,但是之前沒有接觸過,因此希望利用網(wǎng)上的資源來學(xué)習(xí)以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學(xué)習(xí)中,我閱讀的主要資源是5.1.2 Reference ...
摘要:入門和學(xué)習(xí)筆記概述框架的核心有兩個容器作為超級大工廠,負責(zé)管理創(chuàng)建所有的對象,這些對象被稱為。中的一些術(shù)語切面切面組織多個,放在切面中定義。 Spring入門IOC和AOP學(xué)習(xí)筆記 概述 Spring框架的核心有兩個: Spring容器作為超級大工廠,負責(zé)管理、創(chuàng)建所有的Java對象,這些Java對象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做依賴...
閱讀 3031·2021-11-24 10:21
閱讀 1602·2021-10-11 10:57
閱讀 2814·2021-09-22 15:24
閱讀 2678·2021-09-22 14:58
閱讀 2337·2019-08-30 13:16
閱讀 3489·2019-08-29 13:05
閱讀 3422·2019-08-29 12:14
閱讀 3461·2019-08-27 10:55