1.AOP的使用场景
在实际工作中,可能会存在需要在调用方法前后调用其它接口,例如:
1.调用业务方法前,需要根据头部信息来调用外部接口获取到所需的信息,来决定后续方法执行的逻辑;
2.调用业务方法后,日志信息的记录(请求参数、返回结果、执行时长等)。
2.使用
第一步:导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
第二部:创建注解
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JpushAnnotation{
}
第三部:创建 Aspect
@Aspect
@Component
@Slf4j
public class JpushAspect {
@Autowired
private AsyncService asyncService;
//切入点:待增强的方法
@Pointcut("@annotation(com.jpush.anoaspect.JpushAnnotation)")
//切入点签名
public void log(){
System.out.println("pointCut签名。。。");
}
//前置通知
@Before("log()")
public void deBefore(JoinPoint jp) throws Throwable {
}
//返回通知
@AfterReturning(returning = "ret", pointcut = "log()")
public void doAfterReturning(Object ret) throws Throwable {
// // 处理完请求,返回内容
// System.out.println("返回通知:方法的返回值 : " + ret);
}
//异常通知
@AfterThrowing(throwing = "ex", pointcut = "log()")
public void throwss(JoinPoint jp,Exception ex){
// System.out.println("异常通知:方法异常时执行.....");
// System.out.println("产生异常的方法:"+jp);
// System.out.println("异常种类:"+ex);
}
//后置通知
@After("log()")
public void after(JoinPoint jp){
}
}
注意:@Pointcut("@annotation(com.ruoyi.framework.anoaspect.JpushAnnotation)")为刚刚创建创建的JpushAnnotation的相对路径,需自行修改为自己的目录。代码中方法的实现自行编写即可
第四部:使用
@JpushAnnotation
public Boolean insertByBo() {
}
在需要切入的地方加入注解