springboot 切面编程(Aspet)

前言

本贴一如既往的是我自己踩坑学习贴,把日常容易忽略的知识点通过这种方式记录下来。

背景

日常开发中总会有这种情况。
1,需求小姐姐突然改变了需求导致了多个功能的代码都需要统一修改。
2,前后端分离系统安全扫描未通过,QAQ 要求不能明文传输敏感数据
3,emmm应该还有其他情况吧 !

预览效果

我们先来看看简单的效果
页面请求:
在这里插入图片描述
请求代码:

控制台日志 已经进入了切面的。

食用步骤

1,pom的配置依赖

踩坑中发现要是没有添加依赖怎么操作都进不到切面方法,这个真的很重要!

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

2,切面类

直接上干货

@Aspect
@Component
public class BaseAspet {

    @Pointcut("execution(* com.example.demo.biz.service.*.*(..))")
    public void controllerMethod() {
    }

    @Around("controllerMethod()")
    public Object process(ProceedingJoinPoint point) throws Throwable {
        System.out.println("@Around:执行目标方法之前...");
        //访问目标方法的参数:
        Object[] args = point.getArgs();
        if (args != null && args.length > 0 && args[0].getClass() == String.class) {
            args[0] = "1";
        }
        System.out.println("@Around:修改参数后");
        //用改变后的参数执行目标方法
        Object returnValue = point.proceed(args);
        System.out.println("@Around:执行目标方法之后...");
        System.out.println("@Around:操作的目标对象为:" + point.getTarget());
        return "before:" + returnValue + "---after:" + returnValue;
    }
}

5类通知标签如下

标签通知类型
@Before前置通知
@Around环绕通知
@After后置通知
@AfterReturning正常返回
@AfterThrowing异常返回

切点的声明也有两种方式如下
1,通过类的路径指定某一路径下的某类某方法例如:
@Pointcut(“execution(* com.example.demo.biz.service..(…))”)

2,通过指定某一个 Annotation 的方式例如:
@Pointcut("@annotation(com.example.demo.annotation.TestAnnotation)")

ps:可以根据自己的需求灵活变动,不过个人更喜欢第一种方式毕竟第二种方式还要去方法上面打上标签太麻烦啦。

结束

好啦这下就可以开启面向切面编程之旅了根据自己的需求想怎么玩怎么玩细节的东西还需要各位看官自己操作并解锁更多姿势!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值