spring aop 切面測試

2021-07-26 07:55:49 字數 2201 閱讀 5038

spring 配置 aop

切面類:

package com.changhang.urgoo.impl.utils;

import com.changhang.urgoo.impl.entity.result.mesresult;

import com.changhang.urgoo.impl.entity.result.spresult;

import org.aspectj.lang.joinpoint;

import org.aspectj.lang.proceedingjoinpoint;

import org.springframework.transaction.interceptor.transactionaspectsupport;

public class monitorapi

/***

* @date 2023年9月27日 上午9:18:29

* @title log

* @description

* @param jp

* @param rvt void

* @throws

*/public void serviceafter(joinpoint jp, object rvt)

/*** * @date 2023年9月27日 上午9:18:53

* @title processtx

* @description

* @param pjp

* @return

* @throws throwable object

* @throws

*/public object processtx(proceedingjoinpoint pjp) throws throwable

catch (exception e) finally

} /**

* * @date 2023年9月27日 上午9:19:43

* @title release

* @description void

* @throws

*/public void release()

//配置丟擲異常後通知,使用在方法aspect()上註冊的切入點

public void afterthrow(joinpoint jp, exception ex)

}

service:

@service

@transactional

public class testservice extends baseservice

public spresult withoutaop(mapmap) catch (exception e) finally

return sp;

}}

其中 inserttest正常,selecttest異常

函式aop完全不考慮異常,由spring來全程捕捉處理,到了processtx中,集中處理

函式withoutaop則有try catch**,扔出throw new runtimeexception(e);,效果等同於aop,如果此處沒有扔出,則切面**會走around -------- after-returning,因為spring不認為由異常發生,

扔出後,走around ------- after-throwing

注意,在catch中一般需要throw出異常,否則自行處理則spring認為沒有異常在service發生,將不會回滾,當然也可以在catch中顯式回滾:

transactionaspectsupport.currenttransactionstatus().setrollbackonly();

但是這樣所有函式**變得冗長不好維護,不如不進行try catch操作,原則上service層不進行try catch,除非有必須釋放的資源,但仍然需注意將e丟擲給spring,並且finally不能由任何返回,否則spring同樣認為沒有異常發生

processtx中,

result=pjp.proceed(args);

前後,spring捕捉到異常,會進行一系列處理,回滾等等,原則上也不進行try catch,

但此處考慮到異常的返回值,此處顯式回滾,並定義異常返回值,在集中處理器中自行處理異常

spring AOP 多個切面

切面 日誌 author w7 public class logger 切面 安全框架 author w7 public class security 切面 許可權 author w7 public class privilege public void setaccess string acces...

Spring aop 切面程式設計

package cn.annals.demo.proc.aop import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedingjoinpoint import org.aspectj.lang.annotation.after...

SpringAop 切面 理解

切面通俗來說,可以幫助我們簡化重複 我們在日常開發中,我們可能會在各個增刪改介面中記錄日誌,以便出現問題時可以及時有效地找出原因,但是系統中增刪改的介面不是乙個兩個,而是會有很多個,我們如果在所有增刪改的介面中編寫記錄日誌的 就會導致記錄日誌的的邏輯散布於系統中的任何犄角旮旯,導致介面臃腫,介面核心...