後端程式設計之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版本之前【2012年12月】,spring還依賴於cglib的jar包,但是之後就不依賴cglib的jar包了,因為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。
視訊地址:
*********************************************************************************************************************