1. 程式人生 > >簡單理解——面向切面程式設計(AOP)

簡單理解——面向切面程式設計(AOP)

  在傳統的編寫業務邏輯處理程式碼時,我們通常會習慣性地做幾件事情:日誌記錄、事務控制及許可權控制等,然後才是編寫核心的業務邏輯處理程式碼。當代碼編寫完成回頭再看時,不禁發現,揚揚灑灑上百行程式碼中,真正用於核心業務邏輯處理才那麼幾行,如圖6-4所示。方法複方法,類復類,就這樣子帶著無可奈何遺憾地度過了多少個春秋。這倒也罷,倘若到了專案的尾聲,突然決定在許可權控制上需要進行大的變動時,成千上萬個方法又得一一"登門拜訪",痛苦"雪上加霜"。

 如果能把圖6-4中眾多方法中的所有共有程式碼全部抽取出來,放置到某個地方集中管理,然後在具體執行時,再由容器動態織入這些共有程式碼的話,最起碼可以解決兩個問題:

  1. Java EE程式設計師在編寫具體的業務邏輯處理方法時,只需關心核心的業務邏輯處理,既提高了工作效率,又使程式碼變更簡潔優雅。

  2. 在日後的維護中由於業務邏輯程式碼與共有程式碼分開存放,而且共有程式碼是集中存放的,因此使維護工作變得簡單輕鬆。

面向切面程式設計AOP技術就是為解決這個問題而誕生的,切面就是橫切面,如圖6-5所示,代表的是一個普遍存在的共有功能,例如,日誌切面、許可權切面及事務切面等:

  下面我們以使用者管理業務邏輯元件UserServiceAOP實現過程(見圖6-6)為例,深度剖析一下AOP技術的實現原理。AOP技術是建立在Java語言的反射機制與動態代理機制之上的。業務邏輯元件在執行過程中,

AOP容器會動態建立一個代理物件供使用者呼叫,該代理物件已經按Java EE程式設計師的意圖將切面成功切入到目標方法的連線點上,從而使切面的功能與業務邏輯的功能同時得以執行。從原理上講,呼叫者直接呼叫的其實是AOP容器動態生成的代理物件,再由代理物件呼叫目標物件完成原始的業務邏輯處理,而代理物件則已經將切面與業務邏輯方法進行了合成。

現將圖6-6中涉及到的一些概念解釋如下。

  切面(Aspect:其實就是共有功能的實現。如日誌切面、許可權切面、事務切面等。在實際應用中通常是一個存放共有功能實現的普通Java類,之所以能被AOP容器識別成切面,是在配置中指定的。

  通知(Advice

:是切面的具體實現。以目標方法為參照點,根據放置的地方不同,可分為前置通知(Before)、後置通知(AfterReturning)、異常通知(AfterThrowing)、最終通知(After)與環繞通知(Around5種。在實際應用中通常是切面類中的一個方法,具體屬於哪類通知,同樣是在配置中指定的。

  連線點(Joinpoint:就是程式在執行過程中能夠插入切面的地點。例如,方法呼叫、異常丟擲或欄位修改等,但Spring只支援方法級的連線點。

  切入點(Pointcut):用於定義通知應該切入到哪些連線點上。不同的通知通常需要切入到不同的連線點上,這種精準的匹配是由切入點的正則表示式來定義的。

  目標物件(Target):就是那些即將切入切面的物件,也就是那些被通知的物件。這些物件中已經只剩下乾乾淨淨的核心業務邏輯程式碼了,所有的共有功能程式碼等待AOP容器的切入。

  代理物件(Proxy將通知應用到目標物件之後被動態建立的物件。可以簡單地理解為,代理物件的功能等於目標物件的核心業務邏輯功能加上共有功能。代理物件對於使用者而言是透明的,是程式執行過程中的產物。

  織入(Weaving將切面應用到目標物件從而建立一個新的代理物件的過程。這個過程可以發生在編譯期、類裝載期及執行期,當然不同的發生點有著不同的前提條件。譬如發生在編譯期的話,就要求有一個支援這種AOP實現的特殊編譯器;發生在類裝載期,就要求有一個支援AOP實現的特殊類裝載器;只有發生在執行期,則可直接通過Java語言的反射機制與動態代理機制來動態實現。

相關推薦

簡單理解——面向切面程式設計AOP

  在傳統的編寫業務邏輯處理程式碼時,我們通常會習慣性地做幾件事情:日誌記錄、事務控制及許可權控制等,然後才是編寫核心的業務邏輯處理程式碼。當代碼編寫完成回頭再看時,不禁發現,揚揚灑灑上百行程式碼中,真正用於核心業務邏輯處理才那麼幾行,如圖6-4所示。方法複方法,類復類,就這樣子帶著無可奈何遺憾地度過了多少個

面試題: 面向切面程式設計AOP理解

AOP是什麼?     AOP的全稱是Aspect Orient Programming,即面向切面程式設計。是對OOP(Object Orient Programming)的一種補充,戰門用於處理一些具有橫切性質的服務。常常用於日誌輸出、安全控制等。

面向切面程式設計AOP理解

在傳統的編寫業務邏輯處理程式碼時,我們通常會習慣性地做幾件事情:日誌記錄、事務控制及許可權控制等,然後才是編寫核心的業務邏輯處理程式碼。當代碼編寫完成回頭再看時,不禁發現,揚揚灑灑上百行程式碼中,真正用於核心業務邏輯處理才那麼幾行,如圖6-4所示。方法複方法,類復類,就這樣子

C# 中使用面向切面程式設計AOP中實踐程式碼整潔

1. 前言 最近在看《架構整潔之道》一書,書中反覆提到了面向物件程式設計的 SOLID 原則(在作者的前一本書《程式碼整潔之道》也是被大力闡釋),而面向切面程式設計(Aop)作為面向物件程式設計的有力補充,對實踐整潔程式碼更是如虎添翼。 1. Aop 是什麼? 在討論 Aop 之前,我們可以先看看一段很常見

Spring面向切面程式設計AOP原理一之使用JDK實現動態代理

什麼是面向切面程式設計? AOP為Aspect Oriented Programming的縮寫,意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。AOP是OOP(面向物件程式設計)的延續,是軟體開發中的一個熱點,也是Spr

Spring——面向切面程式設計AOP

一.AOP概念: 面向切面程式設計,指擴充套件功能的同時不修改原始碼,將功能程式碼聰業務邏輯中分離出來。 主要功能:日誌記錄、效能統計、事務處理、安全控制、異常處理等。 主要意圖:將日誌記錄,效能統計,安全控制,事務處理,異常處理等程式碼從業務邏輯程式碼中劃分出來,通過對這些行為的分

Spring實踐:面向切面程式設計AOP

原文連結:http://blog.csdn.net/zjf280441589/article/details/50816802 AOP引介 AOP(Aspect Oriented Programing)面向切面程式設計採用橫向抽取機制,以取代傳統的縱向繼承體系的重複

Spring之面向切面程式設計AOP四種通知

面向切面程式設計(AOP)面向切面的程式設計:指很多功能都有重複的程式碼,把這些重複的程式碼獨立出來實現,再在執行的時候動態加入“切面類程式碼”。AOP是一種設計思想,和具體的程式碼實現無關。優點:      A、把共性功能和核心業務功能解耦。      B、共性程式碼的複用

Spring自定義面向切面程式設計AOP

摘自標度 -> AOP為Aspect Oriented Programming的縮寫,意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容

在idea中利用Spring進行面向切面程式設計AOP的一個例子

(1)在idea中新建立一個maven專案aopAspectj,,編寫POM檔案,匯入jar包: <dependencies> <!--aspectj依賴--> <dependency> <grou

【JavaWeb_Part09】面向介面程式設計?NO!我拒絕,我喜歡面向切面程式設計AOP

開篇 很久沒有寫文章了,記得上篇文章中說了一些 Spring 的入門以及 IOC 容器和 DI,今天難得有時間,就打算把剩下的一點 Spring 內容講了。不能再拖了,雖然我是重度拖延症晚期患者。 Spring 測試 先說一下 Spring 中的測試功

[Spring實戰系列]16面向切面程式設計AOP概述

1. 簡介 在軟體中,有些行為對於大多數應用都是通用的。日誌,安全和事務管理的確很重要,但他們是都是應用物件主動參與的行為呢?如果讓應用物件只關注自己所針對的業務領域問題,而其他方面的問題由其他應用物件來處理,這樣會不會更好? 在軟體開發中,分佈於應用中多處的功能被

Spring——面向切面程式設計AOP詳解

宣告:本部落格僅僅是一個初學者的學習記錄、心得總結,其中肯定有許多錯誤,不具有參考價值,歡迎大佬指正,謝謝!想和我交流、一起學習、一起進步的朋友可以加我微信Liu__66666666 這是簡單學習一遍之後的記錄,後期還會修改。 一、問題引入 ​ 在日常寫專案的時候,肯定少不了要列印日誌。例如,要向資料庫中

切面程式設計AOP理解

  在傳統的編寫業務邏輯處理程式碼時,我們通常會習慣性地做幾件事情:日誌記錄、事務控制及許可權控制等,然後才是編寫核心的業務邏輯處理程式碼。當代碼編寫完成回頭再看時,不禁發現,揚揚灑灑上百行程式碼中,真正用於核心業務邏輯處理才那麼幾行,如圖6-4所示。方法複方法,類復類,就這樣子帶著無可奈

Java面向切面程式設計AOP模式

原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面程式設計。解耦是程式設計師編碼開發過程中一直追求的。AOP也是為了解耦所誕

詳解Spring面向切面程式設計AOP)三種實現

一、什麼是AOP AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設計)的補充和完善。OOP引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不過OOP允許開

Spring的控制反轉IoC和麵向切面程式設計AOP的概念淺析。

轉自:http://baike.baidu.com/link?url=BhIdxXwp9Xs7PjzebLL8sisJrgh0MiLUB2clkgpf-rpyexxlKTOXDDCxmX1MYe4qenJ9sfcLUw9gQWZJj9oMw_ 控制反轉——Spring通

C++設計模式::裝飾模式or代理模式or面向切片程式設計AOP

一個例項 裝飾模式:動態地給一個物件(而非一個類)新增一些額外的職責。就增加功能來說,裝飾模式比建立子類更加靈活,因為有時我們的需求是給某個物件而不是整個類新增一些功能,比如為一部手機新增增加掛件、螢幕貼膜等等特性,一種比較靈活的方式,將手機(被裝

理解繼承:JS面向物件程式設計封裝

依然是向阮前輩(阮一峰)學習的部落格原文 學了這一階段和峰大神的幾篇文章,打算下一階段滾回去把指標好好學一下 JS 中,萬物皆物件,但是它又不是一門真正的面向物件程式語言。 那如果我們要把“屬性(prototype)”和方法(“method”)封裝成一個物

楊玲 201771010133《面向物件程式設計java》第十週學習總結

《面向物件程式設計(java)》第十週學習總結 第一部分:理論知識學習部分    第八章    泛型程式設計 一、泛型程式設計的定義 1、JDK 5.0 中增加的泛型型別,是Java 語言中型別安全的一次重要改進。 2、 泛型:也稱引數化型別(paramete