Spring AOP 結合自定義註解的使用
阿新 • • 發佈:2019-03-07
for img support bsp parser disco get asp src
例如要實現一個評論內容的攔截
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 { /** * 解析Spel表達式 * 例如: SpelUtils.parseExpression("‘Hello ‘+#msg", new String[]{"msg"}, new Object[]{"World"}); * 其中 #msg是變量,把對應的參數列表的值依次填充到各個變量中 * *@param expression 表達式 * @param parameterNames 參數名稱 * @param args 參數值 * @return 解析後的表達式 */ public static String parseExpression(String expression, String[] parameterNames, Object[] args) { if (StringUtils.isEmpty(expression) || parameterNames == null|| args == null || parameterNames.length != args.length) { return expression; } SpelExpression spelExpression = new SpelExpressionParser().parseRaw(expression); StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); for (int i = 0; i < parameterNames.length; i++) { evaluationContext.setVariable(parameterNames[i], args[i]); } spelExpression.setEvaluationContext(evaluationContext); return spelExpression.getValue(String.class); } }
切面工具類:
package club.ruanx.util; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import java.lang.reflect.Method; /** * @author 阮勝 * @date 2018/12/20 20:30 */ public class AspectUtils { /** * 根據切入點獲取方法的形參列表 * * @param joinPoint 切入點 * @return 形參列表 */ public static String[] getMethodParamNames(JoinPoint joinPoint) { Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); return getMethodParamNames(method); } /** * 根據方法獲取形參列表 * * @param method 方法 * @return 形參列表 */ public static String[] getMethodParamNames(Method method) { return new LocalVariableTableParameterNameDiscoverer().getParameterNames(method); } }
Spring AOP 結合自定義註解的使用