0424 spring AOP学习
AOP是指什么?
面向切面编程,Aspect Oriented Program。是一种编程范式、思想。
Spring AOP里涉及的AOP原理叫什么?
动态代理。
动态代理其实就是在运行时动态的生成目标对象的代理对象,在代理对象中对目标对象的方法进行增强。
例如:
class UserControllerProxy {private UserController userController;public void saveUser() {checkAuth();userController.saveUser();}
}
这样在实际调用saveUser()时,我调用的是代理对象的saveUser()方法,从而实现了鉴权。
举一个简单的应用例子
举个例子,你想给你的网站加上鉴权,对某些url,你认为不需要鉴权就可以访问,对于某些url,你认为需要有特定权限的用户才能访问
如果你依然使用OOP,面向对象,那你只能在那些url对应的Controller代码里面,一个一个写上鉴权的代码
使用AOP可以写如下代码:
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/static","/register").permitAll().antMatchers("/user/**").hasRoles("USER", "ADMIN")
这样的做法,对原有代码毫无入侵性,这就是AOP的好处了,把和主业务无关的事情,放到代码外面去做。
Spring AOP具体实现方法?
@Repository
public class UserDao {public void addUser(){System.out.println("添加用户");}public void updateUser(){System.out.println("修改用户");}public void deleteUser(){System.out.println("删除用户");}
}
创建一个切面类:
@Aspect
public class MyAspectLog {/*** 方法执行完后执行的方法*/
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")public void log(){System.out.println("记录日志");}
}
在spring配置文件中加入:(这啥
<!-- 启动@aspectj的自动代理支持--><aop:aspectj-autoproxy /><!-- 定义aspect类 --><bean name="myAspect" class="cn.xh.dao. MyAspectLog "/>
AOP 当中的概念:
- 切入点(Pointcut)
在哪些类,哪些方法上切入(where) - 通知(Advice)
在方法执行的什么实际(when:方法前/方法后/方法前后)做什么(what:增强的功能) - 切面(Aspect)
切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强! - 织入(Weaving)
把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)
通知:就是会在目标方法执行前后执行的方法
上面这个例子中:
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")public void log(){System.out.println("记录日志");}
通过通知和目标方法的执行顺序我们可以把通知分为五种:
- 前置通知(before):在目标方法执行之前执行。
- 后置通知(after):在目标方法执行之后执行
- 后置返回通知(after returning):在目标方法返回之后执行,先执行后置通知再执行后置返回通知。
- 异常通知(after throwing):在目标方法抛出异常时执行
- 环绕通知(around):在目标函数执行中执行
通知的执行顺序如下:
try{try{//@Beforemethod.invoke(..);}finally{//@After}//@AfterReturning
}catch(){//@AfterThrowing
}
如何找到需要被aspect的方法的位置?
切入点:应用通知进行增强的目标方法
用这种路径描述:
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")
这里的含义是cn.xh.dao包UserDao类中的参数任意,返回值任意的addUser方法。
连接点
连接点就是可以应用通知进行增强的方法。
因为Spring Aop只能针对方法进行增强,所以这里的连接点指的就是方法,一旦连接点被增强,它就成为了切入点。如上例中的:
public void addUser(){System.out.println("添加用户");}public void updateUser(){System.out.println("修改用户");}public void deleteUser(){System.out.println("删除用户");}
三个方法都是连接点。
作者:夏昊
链接:https://www.zhihu.com/question/24863332/answer/863736101
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考:什么是面向切面编程AOP? - 夏昊的回答 - 知乎
https://www.zhihu.com/question/24863332/answer/863736101
项目里有什么用到的地方?
public-endpoint:不需要authorization就可以用的api
相关文章:
0424 spring AOP学习
AOP是指什么? 面向切面编程,Aspect Oriented Program。是一种编程范式、思想。 Spring AOP里涉及的AOP原理叫什么? 动态代理。 动态代理其实就是在运行时动态的生成目标对象的代理对象,在代理对象中对目标对象的方法进行增强。…...
GB/T 28181-2022 新版差异笔记
GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…...
以轻量级服务器niginx为核心的JavaWeb项目:第一章 项目设计
这里写目录标题 一 需求分析与环境搭建1.需求分析2.环境搭建1.2.1首先配置mysql环境1.2.2 配置maven环境 二 打成War包,发到linux上 一 需求分析与环境搭建 1.需求分析 2.环境搭建 1.2.1首先配置mysql环境 先查找一下mysql环境 [roothadoop122 ~]# mysql --vers…...
【error】 Request method ‘GET‘ not supported app端调用后台接口报错,后台人员自己调用时没问题
目录 问题描述原因分析解决方案方法一:方法二:方法三: 联系自身 问题描述 org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘GET’ not supported at org.springframework.web.servlet.mvc.method.Request…...
Microsoft Bitlocker企业级管理部署方案
目录 一、前言 二、BitLocker部署前的准备工作 三、BitLocker的部署方式 3.1 通过群组策略部署BitLocker...
Jetpack Compose 中使用分页 API 调用的无限滚动
Jetpack Compose 中使用分页 API 调用的无限滚动 最近,我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难,并且确实减少了初始加载时间,比以前少了。如果没有正确实施,实施无限滚动…...
第5章 数据结构之“链表”
链表简介 1.多个元素组成的列表。 2.元素的存储不连续,用next指针连在一起。 数组 vs 列表 数组:增删非手尾元素时往往需要移动元素。如果要在数组中增加一个元素,数组后面的所有元素需要往后面移动一位。如果在数组中删除一个元素&#x…...
SpringMVC - REST风格介绍已经RESTful简化开发
文章目录 RESTREST基本介绍RESTful快速入门RESTful快速开发 REST REST基本介绍 REST (Representational State Transfer), 表现形式状态转换(访问网络资源的风格) 传统风格资源描述形式 http://localhost/user/getById?id1http://localhost/user/saveUser REST风格描述形式 …...
Android 10.0 user模式下解除系统进入recovery功能的限制
1.前言 在10.0的系统rom定制化开发中,系统中recovery模式功能也是很重要的一部分,而在原生系统中,对于debug模式的产品,可以通过电源键和音量+键进入recovery模式, 但是在user模式下的产品,对于通过这种方式,进入recovery模式就受限制了,防止用户无操作为了产品安全等…...
用这些 JavaScript 试题来提高你的编程技能
文章目录 一、解释 Promise 的概念和用法。二、解释节流(throttle)和防抖(debounce)在 JavaScript 中的应用场景。三、请列举 JavaScript 中的原始数据类型。四、请解释JavaScript中的作用域。五、写一个名为 multiply 的函数&…...
倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析
倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析 倾斜摄影超大场景的三维模型在网络发布应用时,常见的问题包括: 1、加载速度慢。由于数据量巨大,网络发布时需要将数据文件分割成多个小文件进行加载,这可能会导致页…...
基于遗传算法的梯级水电站群优化调度研究(Matlab代码实现)
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …...
java每日问题
一,什么时聚集索引什么时非聚集索引 聚集索引就是基于主键创建的索引除了主键索引以外的其他索引被称为非聚集索引也叫二级索引由于在innodb引擎里面一张表的数据对应的物理文件本事就是按照B树来组织的一种索引结构而聚集索引就是按照每张表的主键来构建一颗B树然后…...
C++设计模式之 依赖注入模式探索
依赖注入模式 前言依赖注入模式的角色依赖注入模式的UML图依赖注入模式的设计和实现(C)依赖注入和访问者模式的区别依赖注入模式的使用场景依赖注入模式的优缺点结语 前言 GoF设计模式主要关注的是面向对象编程设计的问题,而依赖注入作为一种编程技术,它…...
如何实现Spring AOP以及Spring AOP的实现原理
AOP:面向切面编程,它和OOP(面向对象编程)类似。 AOP组成: 1、切面:定义AOP是针对那个统一的功能的,这个功能就叫做一个切面,比如用户登录功能或方法的统计日志,他们就各种是一个切面。切面是有切点加通知组成的。 2、连接点:所有可…...
数学建模——数据预处理
在数学建模时,经常遇到数据的预处理,那么会有一些什么情况呢,跟着北海老师总结了他的内容~希望对大家有所帮助! 缺失值 比赛提供的数据,发现有些单元格是null或空的缺失太多:例如调查人口信息,发现“年龄…...
第8章:树
1.树是什么 一种分层数据的抽象模型前端工作中常见的树包括:DOM树,级联选择(省市区),树形控件,…javascript中没有树,但是可以用Object和Array构建树 4.树的常用操作:深度/广度优先遍历,先中后…...
Java基础学习(10)
Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…...
Tomcat多实例部署实验
引言 本文主要内容是tomcat的多实例配置实验。 一、实验准备 Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,互不影响。多实例与虚拟主机不同,虚拟主机的本质是在一个服务下有多个相对独立的目录,但是多实…...
无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...
职场套路多,一不小心就会掉坑,一位网友讲述了自己的遭遇: 今天被领导催促离职了,当时就是这个领导把他从别的公司挖过来。这家公司催得太急,为了投奔这里,他和上家的HR都闹翻了,上家总监挽留他&…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
