spring AOP之重用切点表达式
时间:2022-07-23
本文章向大家介绍spring AOP之重用切点表达式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在使用@Before(execution(value=""))使用切点时,如果是需要重复使用,可以进行统一的设置。
比如说现在有这么一个前置通知和后置通知:
package com.gong.spring.aop.impl;
import java.util.Arrays;
import java.util.List;
import javax.management.RuntimeErrorException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//把这个类声明为一个切面:需要把该类放入到IOC容器中,再声明为一个切面
@Aspect
@Component
public class LoggingAspect {
//声明该方法为一个前置通知,在目标方法之前执行
@Before("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
public void beforeMethod(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
List<Object> args = Arrays.asList(joinPoint.getArgs());
System.out.println(methodName+" begin with "+args);
}
//后置通知:在目标方法执行后,无论是否发生异常,执行的通知
//在后置通知中不能访问目标的执行结果
@After("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
public void afterMethod(JoinPoint joinPoint) {
//获取名字
String methodName = joinPoint.getSignature().getName();
//获取参数
List<Object> args = Arrays.asList(joinPoint.getArgs());
System.out.println(methodName+" end with "+args);
}
}
在@before里面的切点是一样的,我们可以将重复的用切点表达式表示。
在LoggingAspect 类中新建:
@Pointcut("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
public void declarJoinPointExpression() {}
然后在使用Before等注解时,就可以简化了:
@Before("declarJoinPointExpression()")
@After("declarJoinPointExpression()")
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释