一文了解SpringBoot中的Aop

目录

1.什么是Aop

2.相关概念

3.相关注解

4.为什么要用Aop

5.Aop使用案例


1.什么是Aop

AOP:Aspect Oriented Programming,面向切面,是Spring三大思想之一,另外两个是

IOC-控制反转

DI-依赖注入 (@Autowired、@Qualifier、@Resource)

2.相关概念

  • 切面(aspect):横切面对象,一般为一个具体类对象(可以借助@Aspect声明),可以理解为要植入的新的业务功能,这个功能交给某个类负责,这个类就是切面。
  • 切入点(pointcut):对连接点拦截内容的一种定义,在原有的哪些业务方法上扩展新的业务,可以将切入点理解为方法的集合,可以是1个类或某些类。
  • 连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法,可以简单理解为切入点中的一个具体方法。
  • 通知(advice):拦截到连接点之后只要执行的方法,可以理解为一个业务中的扩展逻辑的若干步骤,先做什么(before),再做什么(afterReturn),最后做什么。
  • 目标对象(target):封装原业务逻辑的对象。
  • 代理对象(proxy):负责调用切面中的方法为目标对象植入新的功能。

3.相关注解

@Pointcut定义切入点
@Before目标方法执行之前执行
@After目标方法执行之后必定执行,无论是否报错
@AfterReturning目标方法有返回值且正常返回后执行
@AfterThrowing目标方法抛出异常后执行
@Around可以获取到目标方法的入参和返回值

4.为什么要用Aop

举个例子,假设我们有一个新增数据,和一个删除数据的功能。

可能之前的逻辑是

开始->鉴权->新增数据->记录操作日志->结束

开始->鉴权->删除数据->记录操作日志->结束

借助Aop,我们就可以实现

另外,在以下场景也可以借助Aop

系统日志处理、系统事务处理、系统安全验证、系统数据缓存等

5.Aop使用案例

先看一个简单的例子,就是通过execution表达式来定义某个包小的所有方法为切入点

第一个 * 符号表示返回值的类型任意
com.aop.service即需要进行横切的业务包
包名后面的 .*表示当前包下面的类
.*(..)表示任何方法名,括号表示参数,两个点表示任何参数类型
@Aspect
@Component
@Slf4j
@Order(10)
public class AopAdvice {
    @Before("execution (* com.erich.yand.service.console.day.end.*.*(..))")
    public void beforeAdvice() {
        log.info("beforeAdvice...");
    }

    @After("execution (* com.erich.yand.service.console.day.end.*.*(..))")
    public void afterAdvice() {
        log.info("afterAdvice...");
    }

    @Around("execution (* com.erich.yand.service.console.day.end.*.*(..))")
    public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {
        log.info("before");
        try {
            proceedingJoinPoint.proceed();
        } catch (Throwable t) {
            t.printStackTrace();
        }
        log.info("after");
    }
}

当有多个切面时,Order越小越先执行。

执行后,可以看到结果

 说明执行到我们定义的包下的方法时,确实切进来了~~

以上就是Aop的一个简单案例了,具体如何使用他,还需要根据实际的业务场景来拓展~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值