1.3 Spring框架 --AOP面向切面編程

1.AOP的意義:

AOP切面編程,是對面向對象(oop)的補充,採取橫向抽取機制,將事務處理、日誌記錄等在業務邏輯中重複出現的代碼抽取出來,避免代碼冗餘,方便以後維護。

2.AOP涉及到的一些概念:

切入點:pointcut ,切面與程序的交叉點
切面: Aspect,封裝的用於橫向插入的系統功能(如事務處理、日誌等)

3.Spring框架中的AOP使用動態代理實現的;動態代理分爲:JDK代理 和 CGLIB代理

基於JDK代理的AOP:

一般代理的目標類,實現了業務接口(userDaoImpl類),可以使用JDK代理方式(Spring默認使用JDK代理),代理後的userDao1在調用addUser等方法時,會先觸發JdkProxy的invoke方法,如下:

在這裏插入圖片描述

基於CGLIB代理的AOP:

對於沒有實現業務接口的類(userDao),只能使用CGLIB代理方式。代理後的userDao1在調用addUser等方法時,會先觸發cglibProxy的intercept方法,如下:

在這裏插入圖片描述

4.通過XML配置文件,使用 ProxyFactoryBean類來 獲取切面增強後的目標類 :

在這裏插入圖片描述

5.Spring 2.0 以後提供了一個AOP框架

(1)基於XML文件的AspectJ:

在XML文件中首先引入切面類(myAspect)、目標類(userDao)>配置切面(aop:aspect)>配置切入點(aop:pointcut)==>關聯切入點通知類型(前置aop:before、後置aop:after-returning、環繞aop:around……),如下:

在這裏插入圖片描述

(2)基於註解的聲明式AspectJ

避免XML的AspectJ的配置文件,太臃腫,難以維護;使用註解在切面類(myAspect)中直接定義切入點(myPointCut),並將通知類型(@Before、@AfterReturning……)寫在切面類的方法上,在XML文件中指定掃面指定package下的註解,程序將自動完成目標類的切面增強,如下:

在這裏插入圖片描述

關於一些AspectJ的常用註解:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章