1,宣告自定義註解,這裡的key()為要攔截的方法中的方法體對應的變數名,可以參考第3點.
2,建立乙個切面類,@annatation()中的comment 為方法引數體中的註解對應的變數名
3,在要攔截的方法上加入定義好的註解,其中#comment使用的是spel表示式.
spel表示式工具類:
package切面工具類:club.ruanx.util;
import
org.springframework.expression.spel.standard.spelexpression;
import
org.springframework.expression.spel.standard.spelexpressionparser;
import
org.springframework.expression.spel.support.standardevaluationcontext;
import
org.springframework.util.stringutils;
/*** spel表示式工具類
* *
@author
阮勝 * @date 2018/12/20 20:36 */
public
class
spelutils , new object);
* 其中 #msg是變數,把對應的引數列表的值依次填充到各個變數中**
@param
expression 表示式
* @param
parameternames 引數名稱
* @param
args 引數值
* @return
解析後的表示式
*/public
static
string parseexpression(string expression, string parameternames, object args)
spelexpression spelexpression = new
spelexpressionparser().parseraw(expression);
standardevaluationcontext evaluationcontext = new
standardevaluationcontext();
for (int i = 0; i < parameternames.length; i++)
spelexpression.setevaluationcontext(evaluationcontext);
return spelexpression.getvalue(string.class
); }
}
packageclub.ruanx.util;
import
org.aspectj.lang.joinpoint;
import
org.aspectj.lang.reflect.methodsignature;
import
org.springframework.core.localvariabletableparameternamediscoverer;
import
j**a.lang.reflect.method;
/***
@author
阮勝 * @date 2018/12/20 20:30 */
public
class
aspectutils
/*** 根據方法獲取形參列表**
@param
method 方法
* @return
形參列表
*/public
static
string getmethodparamnames(method method)
}
SpringBoot 結合AOP使用自定義註解
最近使用springboot在做乙個需求的時候,使用到了aop 面向切面程式設計 spring的aop一直都是spring宣傳的一大特性,其實也沒多高大上,就是使用jdk或者aspectj做的動態 這個需求是做乙個審計日誌,使用aop是最最合適不過了,使用aop不用耦合在業務 裡,可擴充套件性好,但...
spring aop 自定義註解實現操作日誌記錄
1,spring配置檔案 2,日誌攔截類 public class logaspect catch throwable e finally return retval private void insertopertlog proceedingjoinpoint jp,stopwatch stopw...
validation 引數校驗 包括自定義註解
validation 引數校驗 jsr提供的校驗註解 null 被注釋的元素必須為 null notnull 被注釋的元素必須不為 null asserttrue 被注釋的元素必須為 true assertfalse 被注釋的元素必須為 false min value 被注釋的元素必須是乙個數字,其...