SpringBoot中对Spring AOP的实现

文章目录

  • SpringBoot中对Spring AOP的实现
    • AOP简介
    • 引入依赖
    • AOP体系与概念
    • 编写AOP切面类
    • 启动SpringBoot项目然后访问controller控制器
    • 对环绕通知放行
    • execution表达式的含义
    • 通过注解方式定义切点

SpringBoot中对Spring AOP的实现

AOP简介

AOP (Aspect Oriented Programming), 面向切面编程,是Spring的三大核心思想之一,Spring的三大核心思想是:

  • IOC 控制反转,也就是IOC容器,我们可以在容器中事先创建对象,后面用到对象的时候就不用再new了,可以直接从IOC容器里面取出来。
  • DI 依赖注入,就是说Spring的对象是在配置文件里面配置的,可以在配置文件里面把一个对象注入给另外一个对象。
  • AOP 面向切面编程,可以大大的解耦,把一些无关业务逻辑的代码单独的抽取出来

引入依赖

在原先的SpringBoot项目里面多加上一个spring-boot-starter-aop依赖,如下图:
在这里插入图片描述

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

我们没有必要使用原始的Spring框架中的aop,因为需要配置各种配置文件,太繁琐了。好的是,SpringBoot中已经继承了SpringAOP,因此我们直接在SpringBoot中引入对应的依赖就可以了。

AOP体系与概念

简单地去理解,其实AOP要做三类事:

  • 在哪里切入,也就是权限校验等非业务操作在哪些业务代码中执行。
  • 在什么时候切入,是业务代码执行前还是执行后。
  • 切入后做什么事,比如做权限校验、日志记录等。

AOP的体系图:
在这里插入图片描述
一些概念如下图:
在这里插入图片描述

编写AOP切面类

如下图:
在这里插入图片描述
代码如下:

package com.xzy.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * @author xuan
 * @create 2023/10/25
 */
@Component
@Aspect
public class ControllerAspect {

    @Pointcut("execution(* com.xzy.controller.*.*(..))")
    public void pointCut() {

    }

    @After("pointCut()")
    public void doAfter() {
        System.out.println("------------- doAfter.");
    }

    @Before("pointCut()")
    public void doBefore() {
        System.out.println("------------- doBefore.");
    }

    @Around("pointCut()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        System.out.println("------------- doAround.执行方法之前的处理");
        Object obj = null;
        try {
            obj = joinPoint.proceed();
            System.out.println("------------- doAround.执行方法之后的处理");
        } catch (Throwable t) {
            t.printStackTrace();
        }
        return obj;
    }
}

启动SpringBoot项目然后访问controller控制器

在这里插入图片描述
最后看一下控制台的输出,如下图:
在这里插入图片描述
可以切面的执行顺序是:先执行环绕通知的前置通知,再执行前置通知,接着执行后置通知,最后执行环绕通知的后置通知。

对环绕通知放行

注意一点,在环绕通知中必须要对方法放行,否则程序会卡在环绕通知的地方,如下图:
在这里插入图片描述

execution表达式的含义

在这里插入图片描述

  • 第一个 * : 表示的是返回类型, * 表示的是所有返回类型都可以;
  • 包名com.xzy.controller表示的是需要拦截的包名就是com.xzy.controller包下的类;
  • 第二个 * : 表示的是com.xzy.controller包下的类, * 表示的是所有类都可以;
  • 最后一个 * : 表示的是这个类下面的方法, * 表示的是所有方法都可以;
  • 小括号里的 点点 : 表示的是方法的参数, 点点表示的是任意参数都可以;

通过注解方式定义切点

如下图:
在这里插入图片描述
使用上面的切面的话,就会切入注解是@GetMapping的所有方法。这种方式很适合处理@GetMapping,@PostMapping,@DeleteMapping不同注解有各种特定处理逻辑的场景。

使用注解切面除了使用的是@annotation定义切入点,其它的和上面的切面没啥差别;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/103408.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能视频监控平台EasyCVR接口调用注意事项汇总!

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

前端,CSS,背景颜色跟随轮播图片改变而改变(附源码)

首先看效果&#xff01; 比如轮播图时红色&#xff0c;那么背景的底色也是红色&#xff0c;轮播图时黄色&#xff0c;背景的底色也是黄色&#xff0c;这就是根据轮播图的图片切换&#xff0c;而改变背景颜色随轮播图颜色一致 话不多说&#xff0c;直接上代码&#xff01;非常简…

Python使用psycopg2读取PostgreSQL的geometry字段出现二进制乱码

1、问题 读取geometry字段出现二进制乱码 查询语句&#xff1a; sql "select * from public"Note: 这种写法在PostgreSQL中直接查询, 没有问题&#xff0c;不会报错。 但是在Python中查询&#xff0c;如果导出的geom还是一长串的geometry 格式的话&#xff0c; …

【计网 EMail】计算机网络 EMail协议详解:中科大郑烇老师笔记 (五)

目录 0 引言1 电子邮件EMail1.1 组成1.2 SMTP协议1.3 案例&#xff1a;Alice给Bob发送报文1.4 SMTP总结1.5 邮件报文格式1.6 POP3协议和IMAP协议 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;计算机四大基础专栏&#x1f4dc; 其他章节&#xf…

计算机网络(谢希仁)第八版课后题答案(第一章)

1.计算机网络可以向用户提供哪些服务 连通性:计算机网络使上网用户之间可以交换信息&#xff0c;好像这些用户的计算机都可以彼此直接连通一样。 共享:指资源共享。可以是信息、软件&#xff0c;也可以是硬件共享。 2.试简述分组交换的要点 采用了存储转发技术。把报文(要发…

每日一练 | 华为认证真题练习Day122

1、路由器所有的接口属于同一个广播域。 A. 对 B. 错 2、下列配置默认路由的命令中&#xff0c;正确的是&#xff08;&#xff09;。 A. [Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.1.1 B. [Huawei-Serial0]ip route-static 0.0.0.0 0.0.0.0 0.0.0.0 C. [Huawei]ip…

如何快速从Oracle迁移到Mysql?

database 一、使用navicat工具二、问题 一、使用navicat工具 1、选择工具中的数据传输 2、源选Oracle,目标选Mysql,一直点下一步 二、问题 1、navicat连接oracle报错:Oracle library is not loaded navicat是通过oracle的客户端连接oracle的,报这个错是因为navicat for or…

Penman-Monteith模型,蒸散发、土壤蒸发、植被蒸腾,植被总初级生产力

植被总初级生产力(GPP)是指植物通过光合作用吸收的碳&#xff0c;是陆地生物圈和大气之间最大的碳通量&#xff0c;GPP的准确量化对于理解气候变化中生态系统功能、农业生产和碳循环的动态以及对气候的反馈具有重要意义 蒸散发&#xff08;Evapotranspiration&#xff0c;ET&a…

html iframe 框架有哪些优缺点?

目录 前言&#xff1a; 用法&#xff1a; 理解&#xff1a; 优点&#xff1a; 嵌套外部内容&#xff1a; 独立性&#xff1a; 分离安全性&#xff1a; 跨平台兼容性&#xff1a; 方便维护&#xff1a; 缺点&#xff1a; 性能开销&#xff1a; 用户体验问题&#xf…

线性代数-Python-02:矩阵的基本运算 - 手写Matrix及numpy中的用法

文章目录 一、代码仓库二、矩阵的基本运算2.1 矩阵的加法2.2 矩阵的数量乘法2.3 矩阵和向量的乘法2.4 矩阵和矩阵的乘法2.5 矩阵的转置 三、手写Matrix代码Matrix.pymain_matrix.pymain_numpy_matrix.py 一、代码仓库 https://github.com/Chufeng-Jiang/Python-Linear-Algebra-…

驱动开发3 ioctl函数的使用+3个实例(不传递第三个参数、第三个参数为整型、第三个参数为地址)

开发板&#xff1a;stm32mp157aaa&#xff08;Cortex-A7*2 Cortex-M4*1&#xff09;开发环境&#xff1a;vscode、串口工具、ubuntu 18.04 vscode编译过程&#xff1a; 1 引入ioctl函数的意义 linux操作系统中有意将数据的读写和读写功能的选择分别交给不同的函数去完成。就让…

【AI视野·今日Robot 机器人论文速览 第五十七期】Wed, 18 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 18 Oct 2023 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Underwater and Surface Aquatic Locomotion of Soft Biomimetic Robot Based on Bending Rolled Dielectric Elastomer Actua…

人工智能(6):机器学习基础环境安装与使用

1 库的安装 整个机器学习基础阶段会用到Matplotlib、Numpy、Pandas等库&#xff0c;为了统一版本号在环境中使用&#xff0c;将所有的库及其版本放到了文件requirements.txt当中&#xff0c;然后统一安装 新建一个用于人工智能环境的虚拟环境 mkvirtualenv ai matplotlib3.8…

django 商品及购物车逻辑实现

基于类视图模式实现商品分类菜单接口开发 创建菜单子应用 python manage.py startapp menu测试 apps/menu/views from django.http import HttpResponse from django.views import Viewclass GoodsMainMenu(View):def get(self,request):print("get请求")return …

Java实现连接SQL Server解决方案及代码

下面展示了连接SQL Server数据库的整个流程&#xff1a; 加载数据库驱动建立数据库连接执行SQL语句处理结果关闭连接 在连接之前&#xff0c;前提是确保数据库成功的下载&#xff0c;创建&#xff0c;配置好账号密码。 运行成功的代码&#xff1a; import java.sql.*;publi…

TOGAF(企业架构)

TOGAF 核心概念&#xff08;官方原版&#xff09; 什么是TOGAF&#xff1f; TOGAF?是一种经验证的企业架构方法和框架&#xff0c;被世界领先的组织用于提高业务效率。它是一个企业架构标准&#xff0c;确保企业架构专业人员之间的标准、方法和通信一致&#xff0c;以便我们…

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】

文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…

【计算机网络】HTTP协议

文章目录 1. HTTP介绍认识URL 2. HTTP消息结构请求request响应response 3. HTTP请求方法4. HTTP报头5. HTTP响应状态码6. Cookie和Session 1. HTTP介绍 HTTP&#xff08;hypertext transfer protocol&#xff09;是一种常用的应用层协议&#xff0c;用于在计算机之间传输超文本…

Linux常用命令——cksum命令

在线Linux命令查询工具 cksum 检查文件的CRC是否正确 补充说明 cksum命令是检查文件的CRC是否正确&#xff0c;确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来&#xff0c;在目的系统中又被计算一次&#xff0c;两个数字进行…

Postman的简单使用

Postman简介 官网 Postman是Google公司开发的一款功能强大的网页调试与发送HTTP请求&#xff0c;并能运行测试用例的Chrome插件 使用Postman进行简单接口测试 新建测试 → 选择请求方式 → 请求URL&#xff0c;下面用百度作为例子&#xff1a; 参考文档 [1] Postman使用教程…