一文了解SpringBoot中的Aop

这篇具有很好参考价值的文章主要介绍了一文了解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,我们就可以实现

一文了解SpringBoot中的Aop,# 进阶篇,spring boot,java,spring,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越小越先执行。

执行后,可以看到结果

一文了解SpringBoot中的Aop,# 进阶篇,spring boot,java,spring,Aop

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

以上就是Aop的一个简单案例了,具体如何使用他,还需要根据实际的业务场景来拓展~~文章来源地址https://www.toymoban.com/news/detail-673585.html

到了这里,关于一文了解SpringBoot中的Aop的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java实战:Spring Boot实现AOP记录操作日志

    本文将详细介绍如何在Spring Boot应用程序中使用Aspect Oriented Programming(AOP)来实现记录操作日志的功能。我们将探讨Spring Boot集成AOP的基本概念,以及如何使用Spring Boot实现AOP记录操作日志。最后,我们将通过一个具体示例来演示整个实现过程。本文适合已经具备Spring Boot基础

    2024年02月22日
    浏览(59)
  • 【Spring进阶系列丨最终篇】一文详解Spring中的事务控制

    本篇文章是【Spring进阶系列】专栏的最后一篇文章,至此,我们对Spring的学习就告一段落,接下来我会持续更新【 Spring+SpringMVC+MyBatis整合 】专栏,欢迎免费订阅! 事务需要放在业务层(service) Spring的事务是基于AOP的 Spring的事务控制有两种:编程式事务【了解】和 声明式事务

    2024年04月25日
    浏览(34)
  • 快速了解spring boot中的@idempotent注解

    目的:一定时间内,同样的请求(业务参数相同)访问同一个接口,则只能成功一次,其余被拒绝 幂等实现原理就是利用AOP面向切面编程, 在执行业务逻辑之前插入一个方法,生成一个token,存入redis并插入到response中返回给前台,然后前台再拿着token发起请求,经过判断只执行

    2024年01月21日
    浏览(41)
  • 【Java面试】Spring中的IOC和AOP

    IOC:控制反转也叫依赖注入。利用了工厂模式 将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的

    2024年02月10日
    浏览(50)
  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot学习大纲,可以留言自己想了解的技术点

    继续完成既定的任务,走起 可以概括为以下步骤: 资源加载:Spring Boot 应用程序启动时,会扫描指定的路径,加载配置文件和类文件等资源。 配置加载:Spring Boot 会根据配置文件(比如 application.properties)中的配置,创建一个 Environment 对象,用于保存应用程序的配置信息。

    2024年02月05日
    浏览(60)
  • SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

    SpringBootWeb入门 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族旗下的项目 Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选

    2024年02月12日
    浏览(61)
  • Spring Boot进阶(48):【实战教程】SpringBoot集成WebSocket轻松实现实时消息推送

            WebSocket是一种新型的通信协议,它可以在客户端与服务器端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。在SpringBoot应用中,集成WebSocket可以方便地实现实时通信功能,如即时聊天、实时数据传输等。         本文将介绍如何在Sprin

    2024年02月09日
    浏览(61)
  • Spring Boot进阶(55):SpringBoot之集成MongoDB及实战使用 | 超级详细,建议收藏

            随着大数据时代的到来,数据存储和处理变得越来越重要。而MongoDB作为一种非关系型数据库,具有高效的数据存储和处理能力,被越来越多地应用于各种领域。尤其在Web应用开发中,SpringBoot框架已经成为了主流选择之一。在这篇文章中,我们将探讨如何将MongoD

    2024年02月17日
    浏览(48)
  • SpringBoot进阶教程(七十九)spring-boot-starter- 有哪些 starter类型

    spring Boot应用启动器基本的一共有44种,具体如下 参考文献:https://www.javatpoint.com/spring-boot-starters

    2024年02月05日
    浏览(55)
  • Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

            在上一期,我对WebSocket进行了基础及理论知识普及学习,WebSocket是一种基于TCP协议实现的全双工通信协议,使用它可以实现实时通信,不必担心HTTP协议的短连接问题。Spring Boot作为一款微服务框架,也提供了轻量级的WebSocket集成支持,本文将介绍如何在Spring Boot项

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包