当前位置: 首页 > news >正文

JAVA AOP简单实践(基于SpringBoot)


天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。


床前明月光,疑是地上霜。
举头望明月,低头思故乡。
——《静夜思》


文章目录

  • JAVA AOP简单实践(基于SpringBoot)
    • 1. 依赖引入
    • 2. 完整依赖
    • 3. 项目包结构
    • 4. 项目启动类
    • 5. 切面类
      • 5.1 类创建
      • 5.2 切点实现
      • 5.3 前置通知
      • 5.4 环绕通知
      • 5.5 后置通知
      • 5.6 返回通知
      • 5.7 报错通知
      • 5.8 完整切面类代码
    • 6. 请求接口的实现
      • 6.1 AopTestController.java
      • 6.2 AopTest2Controller.java
      • 6.3 AopTest3Controller.java
    • 7. 测试接口
      • 7.1 AopTestController.java的方法
      • 7.2 AopTest2Controller.java的方法
      • 7.3 AopTest3Controller.java的方法
    • 8. 输出打印
      • 8.1 test1输出结果
      • 8.2 test2输出结果
      • 8.3 test3输出结果
    • 9. 总结
  • 加分加分
    • 1. 加分
    • 2. 加分
    • 3. 加分
    • 4. 加分
      • 4.1 加分1
      • 4.2 加分2
      • 4.3 加分3
      • 4.4 加分4


关于aop的完整详细版可跳转到链接:Java AOP 介绍与实践

JAVA AOP简单实践(基于SpringBoot)

以下为AOP的简单实现
本项目demo以springboot框架实现

1. 依赖引入

引入aop的依赖

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

当然了,除了aop的依赖,本demo中还用到了其他依赖

2. 完整依赖

项目的所有依赖如下
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hslb</groupId><artifactId>aop_demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.18</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.7.18</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.32</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency></dependencies></project>

3. 项目包结构

该demo的包结构如下,可自行创建,主要为了测试aop匹配不同层级的包的情况
在这里插入图片描述

4. 项目启动类

AopApplication.java

package com.aop;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;/*** @ClassDescription: 项目启动类* 使用@EnableAspectJAutoProxy(proxyTargetClass = true)开启aop* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:33*/
@EnableAspectJAutoProxy(proxyTargetClass = true)
@SpringBootApplication
public class AopApplication {public static void main(String[] args) {SpringApplication.run(AopApplication.class, args);}}

5. 切面类

以下切面类分多个部分进行拆分实现,最后有完整的切面类代码

5.1 类创建

创建切面类AopAspectJ.java
并在类上使用注解@Aspect标记该类为切面类,同时需要使用@Component注解将其标记为Bean

package com.aop.common;import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;/*** @ClassDescription: aop切面类* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:35*/
@Aspect
@Component
public class AopAspectJ {}

5.2 切点实现

在AopAspectJ.java类中定义一个切点方法
方法修饰符为public
返回值为void
方法名自定义
在方法上使用@Pointcut注解将其标记为切点方法
同时在注解中将匹配条件填入,以此来进行拦截满足条件的方法

    /*** 定义切入点方法,方法名自定义,无参数,无内容,定义的方法名后续注解需要使用,以此方法切入*/
//    @Pointcut(value = "execution(* com.aop..*(..))")
//    @Pointcut(value = "execution(* com.aop..*.*(..))")
//    @Pointcut(value = "execution(* com.aop.controller.*.*(..))")@Pointcut(value = "execution(* com.aop.*.*.*(..))")public void pointcut(){}

5.3 前置通知

在AopAspectJ.java类中定义前置通知,进行方法执行前的逻辑实现

    /*** 定义前置通知@Beafore*/@Before(value = "pointcut()")public void before(){System.out.println("前置通知@Before------------------>");}

5.4 环绕通知

在AopAspectJ.java类中定义环绕通知,进行方法执行前、中、后的逻辑实现

    /*** 定义环绕置通知@Around* @param proceedingJoinPoint 连接点* @throws Throwable 抛错*/@Around(value = "pointcut()")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//前置逻辑System.out.println("环绕通知@Around 执行前------------------>");//执行被通知的方法proceedingJoinPoint.proceed();//后置逻辑System.out.println("环绕通知@Around 执行后------------------>");}

5.5 后置通知

在AopAspectJ.java类中定义后置通知,进行方法执行后的逻辑实现

    /*** 定义后置通知@After*/@After(value = "pointcut()")public void after(){System.out.println("后置通知@After------------------>");}

5.6 返回通知

在AopAspectJ.java类中定义返回通知,进行方法执行后并成功返回后的逻辑实现

    /*** 定义返回通知@AfterReturning* @param joinPoint 连接点* @param result 返回结果* @return 返回*/@AfterReturning(value = "pointcut()", returning = "result")public JSONObject afterReturning(JoinPoint joinPoint, JSONObject result){System.out.println("返回通知@AfterReturning------------------>");return null;}

5.7 报错通知

在AopAspectJ.java类中定义报错通知,进行方法执行失败后的逻辑实现

    /*** 定义报错通知@AfterThrowing*/@AfterThrowing(value = "pointcut()")public void afterThrowing(){System.out.println("报错通知@AfterThrowing------------------>");}

5.8 完整切面类代码

以下为切面类的完整代码实现
AopAspectJ.java

package com.aop.common;import com.alibaba.fastjson.JSONObject;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;/*** @ClassDescription: aop切面类* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:35*/
@Aspect
@Component
public class AopAspectJ {/*** 定义切入点方法,方法名自定义,无参数,无内容,定义的方法名后续注解需要使用,以此方法切入*/
//    @Pointcut(value = "execution(* com.aop..*(..))")
//    @Pointcut(value = "execution(* com.aop..*.*(..))")
//    @Pointcut(value = "execution(* com.aop.controller.*.*(..))")@Pointcut(value = "execution(* com.aop.*.*.*(..))")public void pointcut(){}/*** 定义前置通知@Beafore*/@Before(value = "pointcut()")public void before(){System.out.println("前置通知@Before------------------>");}/*** 定义环绕置通知@Around* @param proceedingJoinPoint 连接点* @throws Throwable 抛错*/@Around(value = "pointcut()")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//前置逻辑System.out.println("环绕通知@Around 执行前------------------>");//执行被通知的方法proceedingJoinPoint.proceed();//后置逻辑System.out.println("环绕通知@Around 执行后------------------>");}/*** 定义后置通知@After*/@After(value = "pointcut()")public void after(){System.out.println("后置通知@After------------------>");}/*** 定义返回通知@AfterReturning* @param joinPoint 连接点* @param result 返回结果* @return 返回*/@AfterReturning(value = "pointcut()", returning = "result")public JSONObject afterReturning(JoinPoint joinPoint, JSONObject result){System.out.println("返回通知@AfterReturning------------------>");return null;}/*** 定义报错通知@AfterThrowing*/@AfterThrowing(value = "pointcut()")public void afterThrowing(){System.out.println("报错通知@AfterThrowing------------------>");}}

6. 请求接口的实现

在不同的包中创建请求接口,接口类中的请求路径不同且输出也不同,然后通过表达式不同的拦截条件进行测试不同的接口
查看输出内容即可验证

6.1 AopTestController.java

com.aop.controller.AopTestController.java类

package com.aop.controller;import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.*;/*** @ClassDescription: 请求测试类* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:34*/
@RestController
@RequestMapping(value = "/aop")
public class AopTestController {@GetMapping(value = "test1")public JSONObject test1(@RequestHeader("token")String token,@RequestParam("username")String username){JSONObject jsonObject = new JSONObject();jsonObject.put("token", token);jsonObject.put("username", username);System.out.println("aop test1 token: "+token+" username: "+username);return jsonObject;}}

6.2 AopTest2Controller.java

com.aop.common.AopTest2Controller.java类

package com.aop.common;import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.*;/*** @ClassDescription: 请求测试类* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:34*/
@RestController
@RequestMapping(value = "/aop2")
public class AopTest2Controller {@GetMapping(value = "test2")public JSONObject test1(@RequestHeader("token")String token,@RequestParam("username")String username){JSONObject jsonObject = new JSONObject();jsonObject.put("token", token);jsonObject.put("username", username);System.out.println("aop test2 token: "+token+" username: "+username);return jsonObject;}}

6.3 AopTest3Controller.java

com.aop.common.test.AopTest3Controller.java类

package com.aop.common.test;import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.*;/*** @ClassDescription: 请求测试类* @JdkVersion: 1.8* @Author: 李白* @Created: 2024/12/21 14:34*/
@RestController
@RequestMapping(value = "/aop3")
public class AopTest3Controller {@GetMapping(value = "test3")public JSONObject test1(@RequestHeader("token")String token,@RequestParam("username")String username){JSONObject jsonObject = new JSONObject();jsonObject.put("token", token);jsonObject.put("username", username);System.out.println("aop test3 token: "+token+" username: "+username);return jsonObject;}}

7. 测试接口

启动项目
使用postman进行请求接口测试
依次调用三个接口

7.1 AopTestController.java的方法

请求方式

Get

请求地址

127.0.0.1:8080/aop/test1

请求头参数
在这里插入图片描述
请求参数
在这里插入图片描述

7.2 AopTest2Controller.java的方法

请求方式

Get

请求地址

127.0.0.1:8080/aop2/test2

请求参数和值都与上一个接口一样

7.3 AopTest3Controller.java的方法

请求方式

Get

请求地址

127.0.0.1:8080/aop3/test3

请求参数和值都与上一个接口一样

8. 输出打印

在postman中分别调用三个接口
控制台输出内容依次如下

8.1 test1输出结果

AopTestController.java中test1的输出结果如下

环绕通知@Around 执行前------------------>
前置通知@Before------------------>
aop test1 token: 13579 username: libai
返回通知@AfterReturning------------------>
后置通知@After------------------>
环绕通知@Around 执行后------------------>

在这里插入图片描述

8.2 test2输出结果

AopTest2Controller.java中test1的输出结果如下

环绕通知@Around 执行前------------------>
前置通知@Before------------------>
aop test2 token: 13579 username: libai
返回通知@AfterReturning------------------>
后置通知@After------------------>
环绕通知@Around 执行后------------------>

在这里插入图片描述

8.3 test3输出结果

AopTest3Controller.java中test1的输出结果如下

aop test3 token: 13579 username: libai

在这里插入图片描述

9. 总结

因为我们的表达式是execution(* com.aop.*.*.*(..))
该表达式拦截的是com.aop包下一级包中的所有类的所有方法,不包含下一级包的子包
test1和test2都是aop下一级包的类中的方法
test1是aop.controller包下的类的方法
test2是aop.common包下的类的方法
而test3是aop.common.test包下类的方法,已经是aop包下一级包common包的子包test包下的方法,多了一级,因此拦截不到


感谢阅读,祝君暴富!


版权声明:

  • 作者:寒山李白
  • 博客地址:https://hanshan.blog.csdn.net/
  • 版权:本作品采用《创作共享许可证》进行许可,根据该许可授权的内容可在符合本许可证条款的前提下自由使用、、修改和创作衍生作品。

版权许可介绍:
本文采用CC BY-NC-SA许可证
此许可允许在使用者仅出于非商业目的以任何媒体或格式分发、重新混合、改编和构建材料,并且前提是注明创作者。如果您重新混合、改编或基于该材料进行构建,则必须按照相同的条款对修改后的材料进行许可。

更多信息请访问以下网址查看:
版权官网 https://creativecommons.org/licenses/by-nc-sa/4.0/
中文翻译 https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans


文章结束

--------------------------------------------------------------------------------------------------------------------------------------

以下内容增加文章评分用,可忽略

加分加分

黄河之水天上来,奔流到海不复回
高堂明镜悲白发,朝如青丝暮成雪

1. 加分

黄河之水天上来,奔流到海不复回
高堂明镜悲白发,朝如青丝暮成雪

2. 加分

黄河之水天上来,奔流到海不复回
高堂明镜悲白发,朝如青丝暮成雪

3. 加分

寒山李白
寒山李白

4. 加分

账号密码

名称密码
李白123

4.1 加分1

账号密码

名称密码
李白123

4.2 加分2

账号密码

名称密码
李白123

4.3 加分3

账号密码

名称密码
李白123

4.4 加分4

账号密码

名称密码
李白123

相关文章:

JAVA AOP简单实践(基于SpringBoot)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

重温设计模式--迭代器模式

文章目录 迭代器模式&#xff08;Iterator Pattern&#xff09;概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式&#xff08;Iterator Pattern&#xff09;概述 定义&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个…...

Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表

短短几百行代码,好吧,又是“参考”了国外的月亮 操作,还真地挺自然的。。。。。。国外的实现有点小牛 拖拉,增加+ 一个Element 鼠标左键长按,可以出提示 鼠标右键,清除Element, 有点小bug,不是很自然地完全清除, using System.Collections; using System.Collecti…...

Android 11添加电容笔电量监测需求

软件平台&#xff1a;Android11 硬件平台&#xff1a;QCS6125 需求&#xff1a;PAD接入电容笔&#xff0c;该笔通过驱动上报坐标及当前电量等数据&#xff0c;即走系统的input通道&#xff0c;需要系统层监测到该硬件数据&#xff0c;这里主要展示电量&#xff0c;对用户显示提…...

迈向AGI——大模型创新体验嘉年华邀请函

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ‍ 深度对话&#xff0c;思想碰撞 大模型创新体验嘉年华诚邀您与我们共同见证 智见未来&#xff0c;只等你来 往期精彩文章推荐 关于AI TIME AI TIME源起于2019年&#xff0c;旨在发扬科学思辨精神&#xff0c…...

VSCode 性能优化指南:提高编码效率,减少资源占用

Visual Studio Code&#xff08;简称VSCode&#xff09;是一款广受欢迎的代码编辑器&#xff0c;以其强大的功能和丰富的插件生态系统著称。然而&#xff0c;随着项目规模的扩大和插件数量的增加&#xff0c;VSCode 的性能可能会受到影响。本文将介绍一系列优化措施&#xff0c…...

如何获取 ABAP 内表中的重复项

要识别 ABAP 内表中的重复项&#xff0c;可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目&#xff1a; DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table it…...

android 登录界面编写

1、登录页面实现内容 1.实现使用两个EditText输入框输入用户名和密码。 2.使用CheckBox控件记住密码功能。 3.登录时候&#xff0c;验证用户名和密码是否为空。 4.当前CheckBox控件记住密码勾上时&#xff0c;使用SharedPreferences存储用户名和密码。 5.登录时候使用Prog…...

3D-resnet 50 医学3D图像二分类python代码

离上次发布3D-resnet代码时隔两年&#xff0c;最近让AI推荐3D-resnet的文章给我&#xff0c;AI推荐了三篇 其中两篇是我两年前发的&#xff0c;另一篇在这里Resnet3D预训练网络...... 于是决定更新之前代码&#xff0c;供诸位参考1. 可以用cpu或gpu&#xff08;推荐8G以上&…...

android sqlite 数据库简单封装示例(java)

sqlite 数据库简单封装示例&#xff0c;使用记事本数据库表进行示例。 首先继承SQLiteOpenHelper 使用sql语句进行创建一张表。 public class noteDBHelper extends SQLiteOpenHelper {public noteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory fact…...

项目练习:若依-前端项目的目录结构介绍

文章目录 一、目录截图二、目录讲解 一、目录截图 二、目录讲解 1、首先&#xff0c;我们可以看到&#xff0c;这个VUE项目&#xff0c;只有一个App.vue&#xff0c;所以&#xff0c;它是一个单页面系统。 这个App.vue是根组件&#xff0c;root组件。 2、public目录 在Vue 3.…...

Android 之 List 简述

一、简单创建方式 Android 开发中&#xff0c;列表有很多种类&#xff0c;如ArrayList、LinkedList、List、MutableList等&#xff0c;创建列表的方式如下所示&#xff1a; fun listDemo() {// 使用 listOf 创建不可变的空列表val list listOf<Int>()val list1 listOf…...

CV(6)-SIFT和Hash

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 SIFT:尺度不变特征变换&#xff1a; SIFT提取图像的局部特征&#xff0c;在尺度空间寻找极值点&#xff0c;并提取出其位置、尺度、方向信息。SIFT的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、3D模型建立、手势…...

javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:

javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified: 前言&#xff1a; 之前需求推送数据是采用http:192.168.13.13:8000 后面业务需求修改为 https:192.168.13.13:443 修改后推送数据到第三方报以下异常&#xff0c; https://192.168.13.13:443…...

用Unity做没有热更需求的单机游戏是否有必要使用AssetBundle?

在使用Unity开发没有热更需求的单机游戏时&#xff0c;是否使用AssetBundle&#xff08;AB包&#xff09;是一个值得探讨的问题。以下是对此问题的详细分析&#xff1a; 一、AssetBundle的概述 AssetBundle是Unity中用于存储和加载游戏资源的打包文件&#xff0c;可以包含各种…...

WebRTC Simulcast 大小流介绍与优化实践

Simulcast 是 WebRTC 中的一种标准化技术 &#xff0c;简称大小流。通过 Simulcast&#xff0c;客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码&#xff0c;带宽较多的拉流端可以接收较高质量的视频流&#xff0c;带宽有限的拉流端则可以接收较…...

软件测试之测试用例

文章目录 测试用例测试用例的编写总结 测试用例 测试用例:描述测试点执行的文档(测试输入、执行条件、预期结果等) 作用 1.测试点能被精准执行 2.便于团队合作测试用例核心内容 用例编号、用例标题、所属模块、优先级、前置条件、测试步骤、测试数据、预期结果 测试用例的编写…...

Redis--通用命令学习

目录 一、引言 二、基础命令 1.set 2.get 3.keys 3.1 keys &#xff1f; 3.2 keys * 3.3 keys [abe] 3.4 keys [^] 3.5 keys [a-b] 4.exists 5.delete 6.expire 7.ttl 8.type 三、Redis中的过期策略&#xff08;面试题&#xff09; 1.惰性删除 2.定期删除 …...

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…...

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…...

48页PPT|2024智慧仓储解决方案解读

本文概述了智慧物流仓储建设方案的行业洞察、业务蓝图及建设方案。首先&#xff0c;从政策层面分析了2012年至2020年间国家发布的促进仓储业、物流业转型升级的政策&#xff0c;这些政策强调了自动化、标准化、信息化水平的提升&#xff0c;以及智能化立体仓库的建设&#xff0…...

React Props 完整使用指南

React Props 完整使用指南 1. 类组件中的 Props 1.1 基本使用 // 父组件 class ParentComponent extends React.Component {render() {return (<ChildComponent name"John"age{25}isStudent{true}hobbies{[reading, swimming]}/>);} }// 子组件 class Child…...

金融数据可视化实现

一、设计题目 金融数据可视化 二、设计目的 使学生掌握用Pandas第三方库数据计算、数据分析的知识与能力。Pandas是专门用于数据分析的库&#xff0c;其提供的read_excel()方法可以方便的读取xlsx格式的文件中的数据到Pandas中的DataFrame中。 DataFrame.plot(kindline)&am…...

逆袭之路(6)——解析数据世界的灵动基石——变量

困厄铸剑心&#xff0c;逆袭展锋芒。 寒苦凝壮志&#xff0c;腾跃绘华章。 我要逆袭。 目录 一、引言 二、变量的定义 三、变量的性质 &#xff08;一&#xff09;可变性 &#xff08;二&#xff09;有界性 &#xff08;三&#xff09;关联性 四、变量的类型 &#xff…...

【云原生】kubeadm搭建的kubernetes1.28集群上自建ingress-nginx服务

1、查询兼容性 先确认下kubernetes版本与ingress-nginx版本兼容性 Ingress-NGINX 版本支持的 k8s 版本Alpine 版本Nginx 版本Helm Chart 版本v1.12.0-beta.01.31, 1.30, 1.29, 1.283.20.31.25.54.12.0-beta.0v1.11.31.30, 1.29, 1.28, 1.27, 1.263.20.31.25.54.11.3v1.11.21.3…...

分布式协同 - 分布式事务_TCC解决方案

文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC&#xff08;Two-Phase Commit&#xff0c;二阶段提交&#xff09;3PC&#xff08;Three-Phase Commit&#xff0c;三阶段提交&#xff09;TCC&#xff08;Try-Confirm-Cancel&#xff09;2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…...

两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器

问题原因 remote-ssh还是有一些bug的&#xff0c;在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号&#xff0c;到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...

SpringBoot3整合FastJSON2如何配置configureMessageConverters

在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤&#xff0c;包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…...

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍&#xff1a;Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。Redis 如果在没有开启认证的情况下&#xff0c;…...

java如何使用poi-tl在word模板里渲染多张图片

1、poi-tl官网地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定义word模板 释义&#xf…...

ASP.NET |日常开发中常见问题归纳讲解

ASP.NET &#xff5c;日常开发中常见问题归纳讲解 前言一、性能问题1.1 数据库访问性能1.2 视图状态&#xff08;在ASP.NET Web Forms 中&#xff09; 二、安全问题2.1 SQL 注入2.2 跨站脚本攻击&#xff08;XSS&#xff09; 三、状态管理问题3.1 会话状态&#xff08;Session …...

Jenkins安全部署规范及安全基线

Jenkins安全部署规范及安全基线 进入安全设置界面启用安全Disable remember me访问控制——安全域&#xff08;Security Realm&#xff09;servlet容器代理&#xff08;Delegate to servlet container&#xff09;Jenkins专有用户数据库&#xff08;Jenkins’ own user databas…...

stm32定时器输出比较----驱动步进电机

定时器输出比较理论 OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出…...

文本文件和二进制文件

1.为什么使用文件 使用文件我们可以将数据直接存放在电脑的硬盘上&#xff0c;做到了数据的持久化。 2. 什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09…...

Linux 常见用例汇总

注&#xff1a;本文为 Linux 常见用例文章合辑。 部分内容已过时&#xff0c;未更新整理。 检查 Linux 上的 glibc 版本 译者&#xff1a;joeren | 2014-11-27 21:33 问&#xff1a;检查 Linux 系统上的 GNU C 库&#xff08;glibc&#xff09;的版本&#xff1f; GNU C 库&…...

R9000P键盘失灵解决办法

问题描述 突然&#xff0c;就是很突然&#xff0c;我买的R9000P 2024不到三个月&#xff0c;键盘突然都不能用了&#xff0c;是所有键盘按键都无效的那种。&#xff08;可以使用外接键盘&#xff09; 解决办法 我本科室友说的好哈&#xff0c;全坏全没坏。 &#xff08;该解…...

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器&#xff0c;方便程序代码及文档版本管理。 官网&#xff1a;http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…...

《Web 应用项目开发:从构思到上线的全过程》

目录 一、引言 二、项目启动与需求分析 三、设计阶段 四、技术选型 五、开发阶段 六、测试阶段 七、部署与上线 八、维护与更新 九、总结 一、引言 在数字化浪潮席卷全球的当下&#xff0c;Web 应用如繁星般在互联网的苍穹中闪烁&#xff0c;它们形态各异&#xff0c…...

ctf相关总结

CTF比赛定义&#xff1a; CTF&#xff08;Capture The Flag&#xff09;是一种信息安全竞赛形式&#xff0c;参赛队伍通过破解题目获取flag来得分。 比赛流程&#xff1a; 参赛队伍在题目平台上登录&#xff0c;选择题目进行解答&#xff0c;提交flag后由系统自动评分。 三…...

v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。

一、背景、目的、简介。 一般来说&#xff0c;通过uboot将屏幕参数传给kernel&#xff0c;是通过修改设备树。 uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。 在这里&#xff0c;我先是找到了一个裸机点屏的代码。将其编译成静态库后&#x…...

学习笔记(prism--视频【WPF-prism核心教程】)--待更新

《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合&#xff0c;可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写&#xff0c;维护和扩展来设计应用程序。 优点&#xff1a;遵循特定的约定&#xff0c;可自动将view/ViewModel建立DataContext的关系&#…...

从AI换脸到篡改图像,合合信息如何提升视觉内容安全?

本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石&#xff1a;引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…...

12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number

react table 创建一个下拉菜单&#xff0c;允许用户选择要搜索的列。创建一个输入框&#xff0c;用于输入搜索关键词。根据用户的选择&#xff0c;动态地应用过滤器到指定的列 全局搜索 import React from react; import { useTable, useFilters, useGlobalFilter, useSortBy…...

‘pnpm’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

‘pnpm’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 1.情况: npm -v 和 node -v的都正常就是 pnpm-v 无效 检查环境变量也没看出问题 2.分析 没有正确添加环境变量 3.解决 找到npm的全局安装目录 npm list -g --depth 0这里出现了npm的全局安装…...

频繁拿下定点,华玉高性能中间件迈入商业化新阶段

伴随着智能驾驶渗透率的快速增长&#xff0c;中国基础软件市场开始进入黄金窗口期。 近日&#xff0c;华玉通软&#xff08;下称“华玉”&#xff09;正式获得某国内头部轨道交通产业集团的智能化中间件平台定点项目。这将是华玉在基础软件领域深耕和商业化发展过程中的又一重…...

装饰者模式

代码详解&#xff1a;【设计模式】Java 设计模式之装饰者模式&#xff08;Decorator&#xff09;_java 装饰者模式-CSDN博客 // 抽象构件角色 public interface Component {void operation(); }// 具体构件角色 public class ConcreteComponent implements Component {Override…...

【河南新标】豫财预〔2024〕105号-《关于省级政务信息化建设项目支出预算标准的规定》-费用标准解读系列29

2024年12月3日&#xff0c;河南省财政厅发布了《关于省级政务信息化建设项目支出预算标准的规定》豫财预〔2024〕105号。《关于省级政务信息化建设项目支出预算标准的规定 &#xff08;试行&#xff09;》&#xff08;豫财预 〔2020〕81号&#xff09;同时废止。新的豫财预〔20…...

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的&#xff0c;类似于socket通信&#xff0c;一台设备需要开放服务器套接字并处于listen状态&#xff0c;而另一台设备使用服务器的MAC地址发起连接。连接建立后&#xff0c;服务器和客户端就都通过对BluetoothSocket进行读写…...

使用VSCode Debugger 调试 React项目

一般我们调试代码时&#xff0c;用的最多的应该就是console.log方式了&#xff0c;还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试&#xff0c;除了上面两种方式外还有一种更好用的调试方式&#xff1a; VSCode Debugger。 VSCode Debugger可以直…...

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…...