1. 程式人生 > >後端程式設計之JAVA面向切面的程式設計

後端程式設計之JAVA面向切面的程式設計

        很久沒寫文章了,因為圍繞這個內容錄了視訊,視訊裡基於提綱做了很多擴充套件,所以本文也只是把大綱貼出來,沒有詳細展開,具體還是請看視訊吧【youku畫面太垃圾了,我已在YOUKU上刪除,上載到了網盤上】:

  視訊地址:

  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  【JAVA中面向切面的程式設計技術(簡稱AOP)】【-陳杰第1部分】_2018-09-01

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 【JAVA中面向切面的程式設計技術(簡稱AOP)】【-陳杰第2部分】_2018-09-01

*********************************************************************************************************************

1程式設計技術的發展概述

1.1 面向過程的程式設計POP

面向過程程式設計POP(Procedure Oriented Programming)

1.2 面向物件程式設計OOP

向物件程式設計OOP(Object Oriented Programming)

1.3 面向切面程式設計AOP

面向切面程式設計AOP(Aspect Oriented Programming)

2  Java中AOP的實現方式

2.1 使用靜態代理來模擬AOP程式設計【重點】

           注意:靜態代理本質上還是OOP程式設計,在設計模式中叫代理模式,此處用來模擬AOP,便於和後面講的動態代理做比較。

2.2 使用動態代理實現AOP程式設計【次重點】

(1)基於JDK提供的功能實現動態代理【次重點】

          JDK提供的動態代理功能有侷限性,只能基於介面來實現,也就是說被代理的類中需要進行切入的方法必須抽取出來定義在interface裡。

(2)基於第三方類庫實現動態代理【次重點】

          比JDK提供的基於介面的代理功能要強,可以直接對不繼承任何介面的類進行代理,而且可以用位元組碼技術對沒有原始碼的類進行代理。

            第三方類庫實現代理比較經典和常用的是cglib,3.2.0.RELEASE版本之前【201212月】,spring還依賴於cglibjar包,但是之後就不依賴cglibjar包了,因為spring為了避免版本衝突的問題,已經將cglib的程式碼整合到spring框架內部了。

2.3 使用織入的方式實現AOP程式設計

          織入就是不建立代理類,而是直接對目標類進行修改(類編譯時修改或者類裝載時修改),直接在目標類的方法中插入額外的程式碼。注意這和靜態代理和動態代理都不同,此時並不生成代理類,而是對目標類動了手腳。

Aspectj就是一個支援用織入的方式來實現AOP程式設計的工具,如果要使用Aspectj的織入功能,需要使用到Aspectj提供的編譯器,使用不是很方便。Aspectj提供了兩種織入方式:編譯期織織入和類載入期織入。類載入期織入也就是LTW(Load Time Weaving)。

Spring框架實現AOP時用到了Aspectj工具的部分功能(所以需要引入aspectjweaver這個jar),但是Spring沒有用織入的方式來提供AOP程式設計,使用的還是動態代理技術。

3  Spring 框架中AOP的使用【重點】

3.1 Spring框架中 AOP 相關的一些概念和術語

    連線點是程式執行時的一些邊界,例如類初始化前,初始化後,方法呼叫前,方法被呼叫後,方法丟擲異常後。

Pointcut(切點)是一些特殊的JointPoint(連線點),是你綁定了Advice(通知)的JointPoint(連線點)。在使用時,Pointcut(切點)體現為一個規則表示式,該表示式可以讓程式找出特定的那些JoinPoint(連線點)

當程式執行到滿足條件的邊界點時,AOP機制要回調你定製的某個些方法,這些方法就是Advice(通知),有的資料中把Advice叫增強。在使用時,Advice(通知)體現為一個可執行的方法

【Advice的型別主要有Before,After,AfterReturning,AfterThrowing,Around】

一些Pointcut(切點)和Advice(通知)就構成了一個Aspect(切面)。在使用時,Aspect對應一個

(5)其他一些概念

 Advisor(顧問)、Target(目標物件)、Proxy(代理)、Weaving(織入)。

3.2 Spring 框架中AOP的用法演示【重點】

    使用整合開發工具eclipse做演示,專案構建工具使用maven。

    視訊地址:

*********************************************************************************************************************