ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

六、SpringBoot整合aop(SpringBoot系列)

2021-05-23 23:04:43  阅读:169  来源: 互联网

标签:包中 SpringBoot service com .. 整合 aop 拦截 方法


SpringBoot整合aop

@Component
@Aspect //切面声明
public class LogComponent {
    // 标注拦截的方法
    // 后面*的表示org.javaboy.aop.service目录下所有方法,方法入参为 数量任意,类型任意
    @Pointcut("execution(* org.javaboy.aop.service.*.*(..))")
    public void pc1() {
    }

    @Before(value = "pc1()") //前置通知
    public void before(JoinPoint jp) {
        // 方法名
        String name = jp.getSignature().getName();
        System.out.println("before--" + name);
    }

    @After(value = "pc1()") // 后置通知
    public void after(JoinPoint jp) {
        String name = jp.getSignature().getName();
        System.out.println("after--" + name);
    }

    // 返回通知 returning指返回值
    @AfterReturning(value = "pc1()", returning = "result") //返回通知
    public void afterReturning(JoinPoint jp, Object result) {
        String name = jp.getSignature().getName();
        System.out.println("afterReturning----" + name + "-----" + result);
    }

   
    @AfterThrowing(value = "pc1()",throwing = "e")  // 异常通知
    public void afterThrowing(JoinPoint jp,Exception e) {
        String name = jp.getSignature().getName();
        System.out.println("afterThrowing---"+name+"----"+e.getMessage());
    }

    // 环绕通知,相当于上面的四个的综合
    @Around("pc1()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        // pjp就是被拦截的方法,调用proceed()方法,被拦截的方法才会被执行
        // 想用前置通知,就在调用proceed()方法前
        // 想用前置通知,就在调用proceed()方法后
        // 想用异常通知,就在try-catch 调用proceed()方法
        Object proceed = pjp.proceed();
        return "www.javaboy.org";
    }
}

转载:https://www.cnblogs.com/itsoku123/p/10744244.html

文中有九种表达式的详细介绍

@Pointcut中有中9种切入点表达式的写法

  1. execute
  2. within
  3. this
  4. target
  5. args
  6. @target
  7. @within
  8. @annotation
  9. @args

1. execute

拦截任意公共方法

execution(public * *(..))

拦截以set开头的任意方法

execution(* set*(..))

拦截类或者接口中的方法

execution(* com.java.service.AccountService.*(..))

拦截包中定义的方法,不包含子包中的方法

execution(* com.java.service.*.*(..))

拦截com.java.service包中所有类中任意方法,不包含子包中的类

拦截包或者子包中定义的方法

execution(* com.java.service..*.*(..))

拦截com.java.service包或者子包中定义的所有方法

2.within表达式

表达式格式:包名.* 或者 包名..*

拦截包中任意方法,不包含子包中的方法

within(com.java.service.*)

拦截service包中任意类的任意方法

拦截包或者子包中定义的方法

within(com.java.service..*)

拦截service包及子包中任意类的任意方法

3.@annotation表达式

匹配有指定注解的方法(注解作用在方法上面)

@annotation(com.java.demo2.Annotation)

被调用的方法包含指定的注解的会被拦截

应用场景

常见用于记录日志、异常集中处理、权限验证、Web 参数校验、事务处理等等

//TODO code小demo

标签:包中,SpringBoot,service,com,..,整合,aop,拦截,方法
来源: https://www.cnblogs.com/zhaoyuan72/p/14802489.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有