日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring AOP相关术语解释及简单使用

發(fā)布時(shí)間:2025/1/21 javascript 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring AOP相关术语解释及简单使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是面向切面編程

百度百科定義為:在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。

AOP相關(guān)術(shù)語

通知(Advice)

在AOP術(shù)語中,切面的工作被稱為通知。通知定義了切面是什么以及何時(shí)使用,通知還解決了何時(shí)執(zhí)行。
spring切面有5種通知類型

  • 前置通知(Before):在目標(biāo)方法被調(diào)用之前調(diào)用通知功能;
  • 后置通知(After):在目標(biāo)方法完成之后調(diào)用通知,此時(shí)不會(huì)關(guān)心方法的輸入是什么;
  • 返回通知(After-returning):在目標(biāo)方法成功執(zhí)行之后調(diào)用通知
  • 異常通知(After-throwing):在目標(biāo)方法拋出異常后調(diào)用通知
  • 環(huán)繞通知(Around):通知包括了被通知的方法,在被通知的方法調(diào)用之前和調(diào)用之后執(zhí)行自定義的行為

連接點(diǎn)(Join point)

程序執(zhí)行的某個(gè)特定位置:如類開始初始化前、類初始化后、類某個(gè)方法調(diào)用前、調(diào)用后、方法拋出異常后。一個(gè)類或一段程序代碼擁有一些具有邊界性質(zhì)的特定點(diǎn),這些點(diǎn)中的特定點(diǎn)就稱為“連接點(diǎn)”。Spring僅支持方法的連接點(diǎn),即僅能在方法調(diào)用前、方法調(diào)用后、方法拋出異常時(shí)以及方法調(diào)用前后這些程序執(zhí)行點(diǎn)織入增強(qiáng)。連接點(diǎn)由兩個(gè)信息確定:第一是用方法表示的程序執(zhí)行點(diǎn);第二是用相對(duì)點(diǎn)表示的方位。

切點(diǎn)(Pointcut)

每個(gè)程序類都擁有多個(gè)連接點(diǎn),如一個(gè)擁有兩個(gè)方法的類,這兩個(gè)方法都是連接點(diǎn),即連接點(diǎn)是程序類中客觀存在的事物。AOP通過“切點(diǎn)”定位特定的連接點(diǎn)。連接點(diǎn)相當(dāng)于數(shù)據(jù)庫(kù)中的記錄,而切點(diǎn)相當(dāng)于查詢條件。切點(diǎn)和連接點(diǎn)不是一對(duì)一的關(guān)系,一個(gè)切點(diǎn)可以匹配多個(gè)連接點(diǎn)。在Spring中,切點(diǎn)通過org.springframework.aop.Pointcut接口進(jìn)行描述,它使用類和方法作為連接點(diǎn)的查詢條件,Spring AOP的規(guī)則解析引擎負(fù)責(zé)切點(diǎn)所設(shè)定的查詢條件,找到對(duì)應(yīng)的連接點(diǎn)。其實(shí)確切地說,不能稱之為查詢連接點(diǎn),因?yàn)檫B接點(diǎn)是方法執(zhí)行前、執(zhí)行后等包括方位信息的具體程序執(zhí)行點(diǎn),而切點(diǎn)只定位到某個(gè)方法上,所以如果希望定位到具體連接點(diǎn)上,還需要提供方位信息。

織入(Weaving)

織入是將增強(qiáng)添加對(duì)目標(biāo)類具體連接點(diǎn)上的過程。AOP像一臺(tái)織布機(jī),將目標(biāo)類、增強(qiáng)或引介通過AOP這臺(tái)織布機(jī)天衣無縫地編織到一起。根據(jù)不同的實(shí)現(xiàn)技術(shù),AOP有三種織入的方式:
a、編譯期織入,這要求使用特殊的Java編譯器。
b、類裝載期織入,這要求使用特殊的類裝載器。
c、動(dòng)態(tài)代理織入,在運(yùn)行期為目標(biāo)類添加增強(qiáng)生成子類的方式。
Spring采用動(dòng)態(tài)代理織入,而AspectJ采用編譯期織入和類裝載期織入。

切面(Aspect)

切面是通知和切點(diǎn)的結(jié)合

springboot整合aop簡(jiǎn)單例子

代碼在github上

package com.sl.aop;import org.aspectj.lang.annotation.*; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.stereotype.Component;/*** @author shuliangzhao* @Title: AopLog* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/10/13 15:18*/ @Aspect @Component @EnableAspectJAutoProxy public class AopLog {@Pointcut("execution(* com.sl..*.*(..))")public void pointcut() {}@Before("pointcut()")public void before() {System.out.println("方法執(zhí)行前...");}@After("pointcut()")public void after() {System.out.println("方法執(zhí)行后...");}@Around("pointcut()")public void around() {System.out.println("環(huán)繞執(zhí)行方法...");}@AfterThrowing("pointcut()")public void ffterThrowing() {System.out.println("方法執(zhí)行失敗...");} }

名詞解釋:
例: execution (* com.sl.service…*. *(…))

整個(gè)表達(dá)式可以分為五個(gè)部分:

1、execution()::表達(dá)式主體。

2、第一個(gè)*號(hào):表示返回類型, *號(hào)表示所有的類型。

3、包名:表示需要攔截的包名,后面的兩個(gè)句點(diǎn)表示當(dāng)前包和當(dāng)前包的所有子包,com.sample.service包、子孫包下所有類的方法。

4、第二個(gè)*號(hào):表示類名,*號(hào)表示所有的類。

5、*(…):最后這個(gè)星號(hào)表示方法名,*號(hào)表示所有的方法,后面括弧里面表示方法的參數(shù),兩個(gè)句點(diǎn)表示任何參數(shù)

總結(jié)

以上是生活随笔為你收集整理的Spring AOP相关术语解释及简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。