AOP与SpringAOP

news2024/12/25 10:43:34

AOP与SpringAOP

    • 一、什么是AOP,什么是SpringAOP
    • 二、AOP与拦截器的区别
    • 三、实现SpringAOP
        • 1.添加SpringBootAOP依赖
        • 2.创建切面
        • 3.创建切点
        • 4.创建通知
        • 5.创建连接点
      • 效果

一、什么是AOP,什么是SpringAOP

AOP即Aspect-Oriented Programming面向切面编程。
它是一种思想,它是对某类事情的集中处理。
SpringAOP是一个框架,是AOP思想的一种具体实现产物。

二、AOP与拦截器的区别

SpringAOP是AOP思想实现的一个框架,但我们在项目中经常会用到AOP思想,但是不一定用SpringAOP实现。
有些项目中可能会用到SpringAOP,有的则是用到拦截器。
拦截器是基于AOP思想实现的,不依赖于SpringAOP。

简而言之,拦截器和SpringAOP都是AOP思想的具体实现,属于并列的关系。

三、实现SpringAOP

1.添加SpringBootAOP依赖

在这里插入图片描述

注意:因为我们是spring-boot项目,所以需要不能选择spring对应的aop,而应该是下边的springbootaop依赖。
又我们使用的spring-boot是2.x版本的,所以我们引入aop依赖就需要是2.x版本

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>2.7.5</version>
</dependency>

2.创建切面

创建切面,就是创建一个关于什么的类
在此基础上需要加两个注解@Aspect和@Component注解,交给spring管理

package com.example.demo.common;

import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class UserAOP {

}

3.创建切点

定义拦截规则,其实是一个空方法

//定义切点(配置拦截规则)
    //拦截全部返回值 UserController里的全部方法 参数第一个为int,第二个为String(int,String),这里以全部拦截为例
    @Pointcut("excution(* com.example.demo.controller.UserController.*(..)")
    public void pointcut(){
    }

4.创建通知

前置通知…

@Aspect
@Component
public class UserAOP {

    //定义切点(配置拦截规则)
    //拦截全部返回值 UserController里的全部方法 参数第一个为int,第二个为String(int,String),这里以全部拦截为例
    @Pointcut("excution(*com.example.demo.controller.UserController.*(..))")
    public void pointcut(){
    }

    @Before("pointcut()")//针对哪个切点
    public void doBefore(){
        System.out.println("执行了前置通知"+ LocalDateTime.now());
    }
}

环绕通知做次数统计非常方便。

5.创建连接点

UserController里创建
在这里插入图片描述
ArticleController
在这里插入图片描述

@Aspect
@RestController
@RequestMapping("/article")
public class ArticleController {
    @RequestMapping("/sayhi")
    public String sayHi(){
        System.out.println("hi article springaop");
        return "hi article springaop";
    }
}
@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/sayhi")
    public String sayHi(){
        System.out.println("hi user springaop");
        return "hi user springaop";
    }

    @RequestMapping("/sayhi2")
    public String sayHi2(){
        System.out.println("hi user springaop2");
        return "hi user springaop2";
    }
}

效果

拦截了但是没有制止
只做了打印没做其他处理,所以只能看到打印结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRC 校验码

CRC 校验码 题目解答发送端如何计算商 接收端 题目 假设生成多项式为 G(X)X4X31&#xff0c;要求出二进制序列10110011的CRC校验码 解答 发送端 首先 生成多项式为&#xff1a;G(X)X4X31&#xff0c;改写为二进制比特串为11001(有X的几次方&#xff0c;对应的2的几次方的位…

stable diffusion 单张图片换头roop安装配置

1.首先安装秋叶大佬的webui 2.然后在拓展里面搜索roop,下载roop插件,然后重启webui 3.重启后,在文生图和图生图的界面,就可以看到roop的入口 4.这里面,需要提前安装Visual Studio. 勾选一些必要的选项,这里可以参照b站的视频 # 秋叶版本Stablediffusion的Roop插件的安装 …

RocketMQ消费者可以手动消费但无法主动消费问题,或生成者发送超时

1.大多数是配置问题 修改rocketmq文件夹broker.conf 2.配置与集群IP或本地IPV4一样 重启 在RocketMQ独享实例中支持IPv4和IPv6双栈&#xff0c;主要是通过在网络层面上同时支持IPv4和IPv6协议栈来实现的。RocketMQ的Broker端、Namesrv端和客户端都需要支持IPv4和IPv6协议&…

Qt扫盲-Qt Paint System 概述

Qt Paint System 概述 一、概述二、绘图设备和后端1. Widget2. Image3. Pixmap4. OpenGL绘制设备5. Picture6. 自定义绘制后端 三、绘图与填充1. Drawing2. 填充 Filling 四、坐标系统1. 渲染Window-Viewport转换 五、读写图像文件1. QMovie 六、绘图相关设备 一、概述 Qt的pa…

【Antd】DatePicker日期选择框设置disabledDate不可选择的日期

需要先引入moment import moment from moment; 调用 antd 组件时&#xff1a; <RangePicker disabledDate{disabledDate} /> 其中 disabledDate 赋值如下&#xff1a; 1、当天之前的不可选&#xff0c;不包括当天&#xff1a; const disabledDate (current) > {/…

MyBatis-Plus学习笔记(尚硅谷)

一、MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档&…

互联网发展历程:从网线不够长到中继器的引入

互联网&#xff0c;这个如今贯穿我们生活的无所不在的网络&#xff0c;其发展历程充满了无数的创新和变革。有一项看似不太起眼的技术却在互联网的发展中发挥着至关重要的作用&#xff0c;那就是中继器。本文将带您深入了解互联网的发展历程&#xff0c;探讨在网线不够长的情况…

Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

目录 自动failover MHA&#xff1a; MHA 服务 项目&#xff1a;搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置&#xff1a; MHA下载地址 项目步骤&#xff1a; 一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本&#xff0c;并执行安装…

Typora常用手册

常用快捷键 加粗&#xff1a; Ctrl B 标题&#xff1a; Ctrl H 插入链接&#xff1a; Ctrl K 插入代码&#xff1a; Ctrl Shift C – 无法执行 行内代码&#xff1a; Ctrl Shift K 插入图片&#xff1a; Ctrl Shift I 无序列表&#xff1a;Ctrl Shift L – 无法执行…

第3章 表结构设计

mini商城第3章 表结构设计 一、课题 表结构设计 二、回顾 1、掌握商城架构设计 前后端分离开发模式学习 商城架构设计 商城技术栈讲解 2、微服务模块拆分原则 三、目标 1、整体业务功能分析 2、根据业务需求设计表结构及字段 四、内容 在第一篇文章中有介绍过需求文档…

磁粉制动器离合器收放卷张力控制应用

张力控制系统的开环闭环应用介绍,请查看下面文章链接: PLC张力控制(开环闭环算法分析)_张力控制plc程序实例_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线…

Ubuntu设置定时重启

1.安装/更新 cron 安装crontab sudo apt-get install cron更新命令 sudo apt-get update2.配置cron定时任务 sudo nano /etc/crontab* * * * * root reboot(从左到右&#xff0c;五个 * 依次是 分&#xff0c;时 &#xff0c;天&#xff0c;月&#xff0c;星期)下列命令表示…

开启OLED透明屏代理之路:高质量显示解决方案的商机

随着科技的不断进步&#xff0c;OLED透明屏作为一种创新的显示技术&#xff0c;正逐渐在各个领域得到广泛应用。 作为一名OLED透明屏代理商&#xff0c;你将有机会参与其中&#xff0c;共享这一蓬勃发展的市场。 一、介绍OLED透明屏的概念和特点 1.1 什么是OLED透明屏 OLED透…

lodash常用方法笔记

_.fromPairs(pairs) 与_.toPairs正好相反&#xff1b;这个方法返回一个由键值对pairs构成的对象。 _.fromPairs([[fred, 30], [barney, 40]]); // > { fred: 30, barney: 40 }Object.fromEntries()有同样的功能&#xff0c;只是在高版本浏览器才支持&#xff1a; _toPai…

Command ‘adb‘ not found, but can be installed with: sudo apt install adb

报错信息 Command ‘adb’ not found, but can be installed with: sudo apt install adb 解决方法 因为我们的ubuntu系统并没有安装adb&#xff0c;所以找不到命令&#xff0c;输入安装命令&#xff1a; sudo apt-get install adb安装成功后就可以使用adb命令了。

电子拣货标签2代系统简介

CK_Label_v2 一、革新点 无线 容易安装和移动 按键及指示导引系统 128*64点阵屏幕&#xff0c;自带LED背光 红绿两色高亮LED灯光指示 长电池寿命&#xff0c;常规使用3年以上 二、特点与效益 提升作业速度与品质 简易快速部署 实现无纸化标准化作业 缩短操作人员培训时…

Unity Spine帧事件

SpinePro中添加事件帧 首先 选中右上角的层级树 然后选择事件选项 最后在右下角看到 新建 点击它 新建一个事件 点击左上角的设置按钮 弹出编辑窗口 编辑窗口 在右上角 动画栏 可以切换对应的动画 点坐边的那个小灰点来切换 亮点代表当前动画 选中帧 添加事件 点击对应事件…

从零实战SLAM-第四课(相机成像及常用视觉传感器)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

linux——MongoDB服务

一、MongoDB概述 MongoDB是一个nosql数据库它有高性能、无模式文档型的特点是nosql数据库中功能最丰富&#xff0c;最像关系型数据库&#xff0c;数据库格式BSON。 相关概念 实例&#xff1a; 系统上运行的MongoDB的进程类似于mysql的实例 库&#xff1a; 每个数…

汇编知识点之80x86指令系统

指令系统主要考虑以下几个方面&#xff1a; ①对PSW影响  影响/不影响/不定义 ②B/W  字节还是字操作 ③寻址方式 ④功能 ⑤格式 一、数据传送指令 1.通用数据传送指令 (1) MOV DST,SRC    &#xff1c;–>  (DST)<–(SRC) 注&#xff1a;1.二者不能同时为段…