Spring中使用AspectJ萬用字元 邏輯運算子

2021-09-26 09:04:32 字數 1235 閱讀 8420

前言

​ 本篇是spring核心知識系列的最後一篇,下次就要開始springboot相關的更新。雖然已經使用springboot有一段時間,但我覺得還是有必要先從spring聊起。所以我把spring相關知識又梳理了一遍,有了這幾篇文章。記住,當人們都在大火猛炒的時候,你蒸的那鍋老粥就彌足珍貴了!

本篇是關於aspectj在spring中使用的一些補充知識。具體如下:

切點表示式萬用字元:

​ 上篇文章詳細介紹了spring中使用aspectj來進行切面程式設計,介紹了10種切點函式。切點函式在編寫過程中,非常靈活,可以使用一些萬用字元進行匹配。

@aspectj支援以下3種萬用字元。

*: 匹配任意字元,但它只能匹配上下文中的乙個元素。

//匹配任何public 的方法,返回值,方法名,和引數都匹配任意。

execution

(public**

(..)

)//匹配所有以to結尾的方法

execution(*

*to(.

.))

… : 匹配任意字元,可以匹配上下文中的多個元素,但在表示類時,必須和*聯合使用,在表示入參時則單獨使用。

//匹配com.smart包下,任何 toto

within

(com. smart. service.

.*.*service+

)

+:表示按型別匹配指定類的所有類,必須跟在類名後面,如com.smart.car+。繼承或擴充套件指定類的所有類,同時還包括指定類本身。

@aspectj函式按其是否支援萬用字元及支援的程度,可以分為以下3類。

切點表示式邏輯運算:

切點表示式由切點函式組成,切點函式之間還可以進行邏輯運算,組成復合切點,spring支援以下的切點運算子。

如:within(com.smart…*) and args(string)

表示在com.smart包下的所有類(當前包和子孫包)擁有乙個string入參的方法。

不同增強型別常用註解:

關於幾種增強的示例見碼雲

總結:​ 基於aspectj,在spring中我們可以通過註解的方式生成切面,關於切點的匹配我們需要根據業務需求,編寫切點表示式,其中可以通過萬用字元進行靈活的匹配。同時多個切點表示式又可以做邏輯運算,形成更加細緻的匹配層次。有關不同型別的增強註解,本質和對應的是aop中的增強介面。

Spring註解使用(基於Aspect)

引入xmln context命名空間 package com.xzj.advice context component scan component 該註解相當於 如果沒有引數,把類首字母變小寫,相當於 component 自定義名稱 在spring配置檔案中設定註解在哪些包 base packag...

Spring 配置 (包含掃瞄Aspect)

這個標籤 是 如果掃瞄到有 component controller service等這些註解的類,則把這些類註冊為bean。是不掃瞄 aspect註解的。所以我們需要在子標籤新增 expression org.aspectj.lang.annotation.aspect use ult filte...

Spring中使用QuartzJobBean定時器

1.建立class繼承quartzjobbean import org.quartz.jobexecutioncontext import org.quartz.jobexecutionexception import org.springframework.scheduling.quartz.qu...