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

5. AOP

一、如何定义一个MethodHandler?

1.@Controller注解修饰的类

    1.注册成Spring Bean

     2.表示它是一个SpringMVC下的Controller

2.在这个类下的方法中,只要被@RequestMapping修饰&&方法的形参符合规定(需要看文档) + 方法的返回值符合规定 (需要看文档)

1.不用在意方法的名字

2.不用在意方法的返回值签名


@RequestMapping(value = path)  ==  @RequestMapping(path)

变形如下:

@RequestMapping(value = path, method = GET/POST)

@GetMapping / @PostMapping

@RequestMapping修饰类,直接给这个类的所有方法前面添加统一的URL path前缀


支持的方法形参:

1.原生的Servlet模式

void...(HttpServletRequest req, HttpServletResponse resp);

2.@RequestParam(...)注解修饰的    请求参数

   修饰形参时,@RequestParam可以省略,表示形参的值来自请求参数

   默认情况下String,也可以使用其他基本类型替换

3.HttpSession


二、什么是UUID

UUID是通用唯一识别码的缩写,是一种软件建构的标准。目的是让分布式系统中的所有元素都能有唯一的辨识信息,不需要中央控制器来做辨识信息的指定。每个人都可以创建与其他人不冲突的UUID,就不需要考虑数据库创建时的名称重复问题。

比如,临时文件的文件名就是UUID形成的。

三、redirect 和 forward有啥区别?

重定向:买《暗杀》,老师告诉你应该买《活着》,又去买《活着》了

            有两次HTTP请求

转发:买《暗杀》,老师找了一本《活着》换成《暗杀》的名字给你

           只有一次HTTP请求

MVC能工作的前提:引入thymeleaf依赖

如果不引入,返回的所有view-name都被视为forward

四、AOP

AOP:并不是spring独有的功能,只是一种理念。

AOP——靠对象代理完成

对象代理能力:AOP、Mybatis

JDK原生提供的对象代理能力,只能作用到接口上,必须要有一个接口(限制比较大),所以,由第三方库CHLib,专门去做对象代理,功能更强大!

从代码组织的角度,这种代码的组织方式有缺点,如果公共部分要重构,则需要调整一堆源码文件。(改动越多,出错的风险越大)

使用Spring中AOP。Spring并没有支持所有的概念,是AOP的概念。

1.要使用AOP需要修改依赖关系:

2.如何定义一个切面?

1.首先把类注册到spring@Component
2.需要声明这个类是一个 切面类
如果导入的时候没有@Aspect 注解,说明你忘记更改pom.xml中的spring-boot-starter-aop@Aspect
//这样,就定义了一个切面出来public class MyAspect {

 对象代理(使用Proxy对象,替代Target对象)

调用的时候,优先把控制权交给Proxy去处理

配合IOC,功能更强大了。

功能上,实现AOP +Mybatis原理

AOP是面向切面编程。(切面、切点、通知)(编织、连接点...)

编织:  JDK原生 /  CGLib

使用:@Aspect + @Component定义切面类

          @Pointcut("...")   定义切点(表现在Spring中是一个方法体,方法体是空的)

          表达式:        "execution(...)"          "annotation(...)"

通过@Before、@AfterThrowing、@Around定义通知(Advice)

AOP能生效,原理就是对象代理在起作用。  切面、切点、通知缺一不可 && 不能通过this调用

 

相关文章:

5. AOP

一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中,只要被RequestMapping修饰&&方法的形参符合规定(需要看文档) 方法的返回值符合规定…...

ubuntu上尝试libpqxx库链接人大金仓

ubuntu上尝试libpqxx库链接人大金仓 C的项目让使用国产数据库 运维给架了一个人大金仓数据库, Kingbase 8 是基于 PostgreSQL 9.6 做的, 尝试直接使用libpqxx链接数据库。 文章目录ubuntu上尝试libpqxx库链接人大金仓第一步 搭建libpqxx开发环境搜索lib…...

【Python入门第十二天】Python 列表

Python 集合(数组) Python 编程语言中有四种集合数据类型: 列表(List)是一种有序和可更改的集合。允许重复的成员。元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。集合&#xff08…...

Android 异步操作库 RxJava

RxJava概述 RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。 RxJava 我的理解是将事件从起点(上游)流向终点(下游),中间有很多卡片对数据进操作并传递&#x…...

2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析

2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析T1. 电话号码 给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的…...

github 使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、git与github二、出错的地方1.GitHub没有css样式2、git clone出现错误3、明明创建了responsibility 但git 不显示一、git与github 这个博客写的很好!…...

Kubernetes集群维护—备份恢复与升级

Etcd数据库备份与恢复 需要先安装etcd备份工具yum install etcd -y按不同安装方式执行不同备份与恢复kubeadm部署方式: 备份:ETCDCTL_API3 etcdctl snapshot save snap.db --endpointshttps://127.0.0.1:2379 --cacert/etc/kubernetes/pki/etcd/ca.cr…...

前端开发常用案例(二)

这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下&#xff1a; <!DOCTYPE h…...

基于springboot+vue的儿科保健计划免疫系统

基于springbootvue的儿科保健计划免疫系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背…...

1.两数之和

难度简单给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。你可以按任意顺序…...

字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)

Knuth-Morris-Pratt算法&#xff08;简称KMP&#xff09;是最常用的字符串匹配算法之一。算法简介如下算法解释主要来源于这里&#xff0c;但是通常很难阅读完全&#xff0c;我推荐你直接进入下一节 图例解释部分。我们来观察一下朴素的字符串匹配算法的操作过程。如下图&#…...

工程师手册:电源设计中的电容选用规则

摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计&#xff0c;电源设计应当是很重要的&#xff0c;它很大程度影响了整个系统的性能和成本。电源设计中的电容使用&#xff0c;往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…...

【安全开发】专栏文章汇总

安全开发–1–TCP和UDP网络编程 安全开发–2–嗅探邮箱协议口令 安全开发–3–Python实现ARP缓存投毒 安全开发–4–SSH通信工具开发 安全开发–5–编写简单的netcat工具 安全开发–6–一个简单的TCP代理工具开发 安全开发–7–SSH隧道工具开发 安全开发–8–Python实现流量数据…...

视频监控流程图4

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/> <link rel"stylesheet" type"text/css" href"visio.css"/> <title> 视频监控流程图 </title> <…...

「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译)

「JVM 编译优化」Java 语法糖&#xff08;泛型、自动装箱/拆箱、条件编译&#xff09; 语法糖可以看做事前端编译期的一些小把戏&#xff1b;虽不会提供实质性的功能改进&#xff0c;但它们或能提高效率&#xff0c;或能提升语法的严谨性&#xff0c;或能减少编码出错的机会&a…...

Linux下的进程控制

目录 退出码 终止进程 进程等待 进程程序替换 自己实现简易shell命令行 内建命令 退出码 在编写代码时main函数内部我们通常都使用return 0;结尾&#xff0c;以此标识正常退出。这里的return 0就是所谓的退出码&#xff0c;Linux下也是一样&#xff1a; 看这个小程序&…...

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged

QT 文件监视系统QFileSystemWatcher监视目录的改变相关操作说明mainwindow.hmainwindow.cpp调试结果相关操作说明 添加头文件 Header: #include qmake: QT core bool QFileSystemWatcher::addPath(const QString &path)如果路径存在&#xff0c;则会向文件系统监视器添…...

Typescript基础知识(类型断言、类型别名、字符串字面量类型、枚举、交叉类型)

系列文章目录 引入一&#xff1a;Typescript基础引入&#xff08;基础类型、元组、枚举&#xff09; 引入二&#xff1a;Typescript面向对象引入&#xff08;接口、类、多态、重写、抽象类、访问修饰符&#xff09; 第一章&#xff1a;Typescript基础知识&#xff08;Typescri…...

Windows系统扩充C盘空间系列方法总结

目录前言方法一 使用自带的Windows的DiskPart扩充C盘1. 打开cmd2.三步命令方法二&#xff1a;使用Windows系统内置磁盘管理扩展C盘方法三. 使用专业磁盘分区工具总结前言 本教程是总结Windows系统进行C盘&#xff08;系统盘&#xff09;扩充空间的系列方法&#xff0c;一般来讲…...

华为OD机试 - 跳格子(Python)

跳格子 题目 地上共有N个格子,你需要跳完地上所有的格子, 但是格子间是有强依赖关系的,跳完前一个格子后, 后续的格子才会被开启,格子间的依赖关系由多组steps数组给出, steps[0]表示前一个格子,steps[1]表示steps[0]可以开启的格子: 比如[0,1]表示从跳完第0个格子以后…...

Java配置文件的值注入

1.平常使用直接在变量头上加上Value就可以把配置文件的值注入进来 Value(“${environment.active}”) private String environment; 2.但是变量使用static修饰时&#xff0c;就不能注入进来了 Value(“${environment.active}”) private static String environment; 这是因…...

SAP 订单BOM与销售BOM的区别

订单BOM与销售BOM的区别 訂單BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM 銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的. 標準BOM: 是公司為標準生產的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的…...

支付宝支付详细流程

1、二维码的生成二维码生成坐标 <!-- zxing生成二维码 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>co…...

TCP 的演化史-fast retransmit/recovery

工作原因要对一个 newreno 实现增加 sack 支持。尝试写了 3 天 C&#xff0c;同时一遍又一遍梳理 sack 标准演进。这些东西我早就了解&#xff0c;但涉及落地写实现&#xff0c;就得不断抠细节&#xff0c;试图写一个完备的实现。 这事有更简单的方法。根本没必要完全实现 RFC…...

CSS基础选择器,你认识多少?

前言在上一文初识CSS中&#xff0c;我们了解到了其格式&#xff1a;选择器{ }在初步尝试使用时&#xff0c;我们笼统的直接输入了p { }以选择p标签来对其操作&#xff0c;而这一章节里&#xff0c;我们再进一步探索有关基础选择器的相关内容&#xff0c;理解选择器的作用。选择…...

ChatGPT入门案例|商务智能对话客服(三)

本篇介绍智能客服的基本功能架构和基本概念&#xff0c;并利用对话流技术构建商务智能应用。 01、商务智能客服功能结构 互联网的发展已经深入到社会的各个方面&#xff0c;智能化发展已经成为社会发展的大趋势。在大数据和互联网时代&#xff0c;企业和组织愈加重视客户沟通…...

Matlab 最小二乘法拟合平面(SVD)

文章目录 一、简介1.1最小二乘法拟合平面1.2 SVD角度二、实现代码三、实现效果参考资料一、简介 1.1最小二乘法拟合平面 之前我们使用过最为经典的方式对平面进行了最小二乘拟合(点云最小二乘法拟合平面),其推导过程如下所示: 仔细观察一下可以发现...

AtCoder Regular Contest 126 D题题解

思路 首先我们看看假设选中 mmm 个数后的答案。 我们首先现将 mmm 个数移动到一起&#xff0c;在将他们重新排序。 我们知道&#xff0c;mmm 个数移在一起时&#xff0c;当位于中间的那个数不动时交换次数最少&#xff0c;于是可以列出式子&#xff08;cic_ici​ 是点 iii 的…...

Android R WiFi热点流程浅析

Android R WiFi热点流程浅析 Android上的WiFi SoftAp功能是用户常用的功能之一&#xff0c;它能让我们分享手机的网络给其他设备使用。 那Android系统是如何实现SoftAp的呢&#xff0c;这里在FWK层面做一个简要的流程分析&#xff0c;供自己记录和大家参考。 以Android R版本为…...

【C++进阶】二、多态详解(总)

目录 一、多态的概念 二、多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 虚函数重写的两个例外 2.4.1 协变 2.4.2 析构函数的重写 2.5 C11 override 和 final 2.5.1 final 2.5.2 override 2.6 重载、覆盖(重写)、隐藏(重定义)的对比 三、…...

北京企业网站建设价格/阿里云搜索

通过上面pt-table-checksums找到了这些不一致的数据表&#xff08;https://blog.51cto.com/li02yu/2340403&#xff09;&#xff0c;如何同步数据呢&#xff1f;即如何修复MySQL主从不一致的数据&#xff0c;让他们保持一致性呢&#xff1f;利用另外一个工具 pt-table-sync。使…...

苏州模板建站哪家好/微博关键词排名优化

几种常见的基于比较的排序方式 排序简介 这些排序都给了示例图&#xff0c;可能没有视频那么生动&#xff0c;但图片也有视频没有的好处&#xff0c;那就是读者可以仔细斟酌每一处的细节&#xff0c;接下来让我们来感受排序算法的魅力吧&#xff01; 交换排序 1.冒泡排序 思想…...

网站的维护怎么做/百度怎么发布自己的广告

我安装了32位的office 然后今天突发奇想 安装了一个64位的 visio &#xff0c;之后看到有人在网上发文章 如何解决viso2013无法安装64位版本的Office https://jingyan.baidu.com/article/a65957f4db6ae124e67f9b9b.html 我就按照上面的操作进行了一番神操作 我在没有备份的情…...

温州哪家做网站/青岛网站推广系统

1、安装pyinstallerpython安装目录下shift右键打开cmd 或者Powershell窗口输入pip install pyinstallerpython安装目录下Scripts文件夹下会出现 pyinstaller.exe2、添加环境变量在系统变量PATH中再加入"python安装地址Scripts"&#xff0c;否则cmd中会提示‘pyinstal…...

淮安市哪里可以做网站/免费网站友情链接

部署prometheus监控服务器 安装监控服务器修改配置文件编写service文件&#xff0c;管理服务查看监控数据 所有主机系统均为CentOS7&#xff0c;提前配置IP、主机名、系统YUM源 安装监控软件&#xff08;192.168.4.10主机操作&#xff09; 安装软件 [rootprometheus ~]# tar …...

wordpress 游客留言/怎么自己开网站

前提条件&#xff1a; (1) zabbix服务器端已经成功安装并且运行。 (2) zabbix客户端已经成功建立并且运行。 1 下载并且安装msmtp软件 Wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.32/msmtp-1.4.32.tar.bz2/download tar jxvf msmtp-1.4.32.tar.bz2 cd ms…...