首页 > 编程语言 >认识Spring AOP 面向切面编程

认识Spring AOP 面向切面编程

时间:2023-08-14 12:38:49浏览次数:61  
标签:连接点 Spring AOP 切面 通知 方法

一. 什么是 Spring AOP

关于什么是 Spring AOP. 当我翻到官方文档的时候也是一惊

Let us begin by defining some central AOP concepts and terminology. These terms are not Spring-specific… unfortunately, AOP terminology is not particularly intuitive; however, it would be even more confusing if Spring used its own terminology.

什么意思呢 ? 大概意思就是 Spring 官方说这些概念不是 Spring 独有的, 而是已经存在了的. 并且这些术语都不是很直观, 如果使用 SPring 自己的术语, 将会让人更加困惑.

当说到这的时候, 相信你已经知道了. 不是 Spring 特有的概念这不是关键, 主要的是连官方都说了 Spring AOP 的概念非常抽象, 理解起来会有一定的难度. 大致来看看到底什么是 SPring AOP, 它又到底是能做些什么 ?

认识Spring AOP 面向切面编程_连接点

1. Spring AOP 作用

现在无论是什么系统或者应用, 在使用之前都需要进行用户登陆验证. 除了登陆以及注册一面不需要验证以外, 其余功能基本都需要登陆才能使用. 因此想要完成这件事, 在之前我们是在所有需要验证的页面中通过 Controller 来登陆验证.

当你的功能越来越多之时, 你需要写的登陆验证也越来越多, 但是这些方法又是相同的, 会无故增加你很多代码修改和维护的成本. 那么如何将它单独抽离出来做成一个大家都能使用的功能, 让其他页面直接调用就能判定登录就是目前需要解决的.


在上面的基础之上, Spring AOP 的诞生就让其很好地进行了解决. 那么现在能解释什么是 Spring AOP 了吧 ?


AOP 是一种思想, Spring AOP 它是一种框架, 它提供了一种对 AOP 的具体实现. 类似于我们之前学的 Ioc 和 DI 之间的关系. 简单来说, AOP 干的是将某一个统一的功能集中处理.


统一的用户登录

统一的日志记录

统一的方法执行时间统计

统一的返回格式

统一的异常处理

统一的事务开启和提交

除了这些, 还有很多. 也就是说使用 AOP 可以扩充多个对象的某种能力. ( 张三、李四都具有相同的登陆能力等等 ).

2. AOP 的组成

2.1 Aspect 切面

什么是切面 ?


指的是横切多个类的一种模块. 在 Spring 中切面用的就是普通的类 ( XML 或者 @Aspect 注解配置 ). 这么一听好像很抽象, 比如我们刚刚说的登陆页面模块, 查看他人文章, 发布文章等等, 在执行自己对应的功能之前进行登录验证. 那么为了处理这个问题, 创建了一个普通类来集中处理. 而这个类就是切面.

这里的多个类就是执行对应的功能类, 而横切就是登陆. 把登陆创建成一个集中模块来处理就是切面.


2.2 Joint point

Joint Point : 连接点, 表示要横切的方法. 就是执行 AOP 功能的所有方法


例如上面登陆说的, 查看他人文章和发布文章的功能方法都是连接点.

2.3 Pointcut 切点

所谓的切点就是从哪里开始入手的意思. 也就是对于那些连接点起作用.


例如上面登陆说的, 可以从查看他人文章和发布文章这两个功能切入, 也就是定义的 AOP 只对这两个起作用, 而对于注册功能是不起作用的, 因为它不需要实现登录检验.

2.4 Advice 通知

通知, 是非常复杂的. 它里面定义了切面是什么, 什么时候使用. 描述了切面要完成的工作, 还解决什么时候执行这个工作的问题.


关于 Advice 通知它有很多类型, 可以在方法上使用一下注解, 会设置改方法为通知方法, 在满足条件以后会通知本方法进行调用

2.4.1 前置通知 : @Before

通知方法会在目标方法 ( 也就是连接点 ) 调用之前执行

2.4.2 后置通知 : @After

通知方法会在目标方法 ( 连接点 ) 调用之后执行.


PS : 无论连接点是正常结束还是异常结束都会执行

2.4.3 返回通知 : @AfterReturning

通知方法会在目标方法 ( 连接点 ) 返回之后调用


PS : 需要方法正常 return 并且没有抛出异常

2.4.4 异常通知 : @AfterThrowing

通知方法会在目标方法 ( 连接点 ) 异常之后调用

2.4.5 环绕通知 : @Around

通知包裹了被通知的方法, 在被通知的方法 ( 连接点 ) 通知之前和调用之后执行的自定义的行为



标签:连接点,Spring,AOP,切面,通知,方法
From: https://blog.51cto.com/u_16154119/7074799

相关文章

  • Spring 响应式编程-读书笔记
    本文为《Spring响应式编程》的读书笔记,响应式技术栈可以创建极其高效、易于获取且具有回弹性的端点,同时响应式可以容忍网络延迟,并以影响较小的方式处理故障。响应式微服务还可以隔离慢速事务并加速速度最快的事务。通过本书可以学到以下内容:响应式编程基本原则和响应式流(Reactive......
  • Spring Cloud之网关
    接口的分类:开放接口:可以授权一些接口口OAuth2.0协议方式第三方联合登录内部接口:一般只能在局域网中进行访问,服务与服务之间关系都在同一个微服务系统中。目的是为了保证安全问题接口设计:接口权限开放or内部幂等性安全性https防止篡改数据(验证签名)网关拦截接口实......
  • Spring Cloud Alibaba-服务雪崩效应
    一、高并发带来的问题在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。二、服务......
  • 使用Spring initializr快速创建一个springboot项目
     第一步首先new一个新的project选择Springinitializr配置好相关信息后下一步编辑在左上角我们可以选择SprinBoot的版本,在这里直接加入web依赖springweb和Template的Thymeleaf依赖,点上对勾后可以在最右边里看到你选择的依赖,然后点击create编辑可以看到我们的项目结构,很多sprin......
  • 深入解析 Spring Boot 自动配置机制
    SpringBoot作为一款广泛应用的微服务框架,以其强大的自动配置功能而闻名。这一特性能够让开发人员快速搭建和部署应用程序,无需手动繁琐的配置。在本篇博客中,我们将深入探究SpringBoot自动配置的机制,剖析其背后的原理,并通过代码示例演示如何定制自动配置。1.自动配置的核心原理......
  • 深入探究 Spring Boot 自动配置的内部机制
    SpringBoot作为一款广泛应用的微服务框架,以其强大的自动配置功能而受到瞩目。这一特性能够让开发人员快速搭建和部署应用程序,无需手动繁琐的配置。在本篇博客中,我们将深入探讨SpringBoot自动配置的内部机制,揭示其背后的原理,并通过代码示例演示如何进行自定义的自动配置。1.自......
  • Spring Boot 自动配置原理深度解析
    SpringBoot作为一款广泛应用的微服务框架,以其强大的自动配置功能而著名。这一特性能够让开发人员快速搭建和部署应用程序,无需手动繁琐的配置。在本篇博客中,我们将深入探究SpringBoot自动配置的原理,揭示其背后的工作机制,并通过代码示例演示如何进行自定义的自动配置。1.自动配......
  • 揭秘 Spring Boot 自动配置的内部机制
    SpringBoot作为一款广泛使用的微服务框架,以其强大的自动配置功能而受到瞩目。这一特性能够让开发人员快速搭建和部署应用程序,无需手动繁琐的配置。在本篇博客中,我们将深入探究SpringBoot自动配置的内部机制,剖析其背后的原理,并通过代码示例演示如何进行自定义的自动配置。1.自......
  • 深入解析 Kafka 消息传递机制及其在 Spring Boot 中的应用
    Kafka作为一款高性能的分布式消息中间件,被广泛用于构建实时数据流处理和事件驱动的架构。在本篇博客中,我们将深入探讨Kafka的消息传递机制,并结合SpringBoot框架,演示如何在应用中使用Kafka进行消息传递。1.Kafka消息传递机制Kafka使用发布-订阅模型来实现消息传递。核心......
  • Kafka 消息传递机制与 Spring Boot 集成实践
    Kafka作为一款强大的分布式消息中间件,被广泛应用于实时数据流处理和事件驱动的架构。在本篇博客中,我们将深入探讨Kafka的消息传递机制,并结合SpringBoot框架,演示如何在应用中集成和使用Kafka进行消息传递。1.Kafka消息传递机制概述Kafka使用发布-订阅模型来实现高效的消......