前言
本贴一如既往的是我自己踩坑学习贴,把日常容易忽略的知识点通过这种方式记录下来。
背景
日常开发中总会有这种情况。
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:可以根据自己的需求灵活变动,不过个人更喜欢第一种方式毕竟第二种方式还要去方法上面打上标签太麻烦啦。
结束
好啦这下就可以开启面向切面编程之旅了根据自己的需求想怎么玩怎么玩细节的东西还需要各位看官自己操作并解锁更多姿势!