aop分為兩種方式:xml配置和註解(@aspect,@pointcut和@advice).
pointcut expression(切面表示式):指示器(designators(execution()和其他))、萬用字元(wildcards(*,..,+))和邏輯運算子(||、&&和!)。
萬用字元: * 表示匹配任意數量的字元,+ 匹配指定類及其之類 和 .. 一般用於匹配任意數的子包或者引數。
邏輯運算子:||(或)、&&(和)和!(非)。
指示器:
匹配方法:(execution())引數匹配(包含了方法名稱和引數型別),
表示式寫法:@pointcut("exectution(public(修飾符)
*(返回值)
com.aop.service.*service.*(..) (先是包名,然後是類方法名稱、最後是引數型別)
throws 異常型別(異常跑丟擲可選))"),子包在路徑中使用 ..符號。
匹配註解:@target()自定義註解,與retetion註解一起使用、匹配方法級別(retetion級別為runtime)
@within()匹配包或子包以及制定類(retetion級別為class)在spring環境下,target與within匹配註解級別無差別
@args()匹配引數級別、
@annotation()註解自定義註解的名稱,主要匹配方法級別
匹配包/型別:within(),匹配指定類或者指定包裡面的所有方法
匹配物件:this()是aop**物件方法(可以對introduction增加的方法進行**)、target()與this的卻就是不能進行introduction**和bean()是對bean所配置的進行方法**
匹配引數:args()引數匹配型別(引數個數可以使用 .. 省略多個引數,具體見萬用字元)
springaop實現原理:主要是使用**,靜態**(使用介面進行**類實現和目標類實現)和動態**(jdk**和cglib**)。
靜態**:使用介面進行**類實現和目標類實現。
動態**:基於介面**和基於繼承**。
jdk**只能基於介面進行動態**,使用j**a.lang.reflect.proxy類動態生成**類,實現介面invocationhandle。
cglib**是基於繼承實現**,無法對static、final類**,無法對static、private方法進行**。
sop的應用:@translational,@preauthorize(許可權,需要引入security依賴); @cacheable;
Linux crontab使用詳情
基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59 每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列表示日期1 31 第4列表示月份1 12 第5列標識號星期0 6 0表示星期天 第6列要執行的命令 crontab檔案的一些例子 上面的例子表示每晚的21 3...
Spring Aop基礎使用
說到spring,想必大家一定就馬上想到了,哦spring不就是幫助管理bean物件,封裝資料源,提供事務管理的東西麼。的確,平常在使用spring的時候,用到最多的就是spring提供的這些功能了,其實spring還有乙個挺好的東西,或許大家平常用得少一些,他就叫aop。什麼aop,這是什麼玩意兒...
Query註解使用詳情
value 取值,要麼使用原生sql,要麼使用jpql nativequery 表示是否採用原生sql,諸如select from tablename 1 使用 形參名 示例 單個形參的情況 多個形參的情況 2 使用?數值,數值表示形參位置,1表示第乙個形參,依次內推 示例 單個形參的情況 多個形參...