AOP(面向切面编程)

AOP是针对面向对象编程的一种补充,有时使用面向对象不能很好完成一些额外的功能业务时,可以采用AOP来进行补充。切面编程的目的就是为了将业务目标进行而外的增强或者扩展。Spring中的AOP是基于JDK动态代理和CGLIB动态代理实现的。

应用场景

日志操作:

可以在业务方法前后进行日志的记录,不需要每个业务方法中都编写重复的代码

权限管理:

可以在调用目标方法前确定是否有权限

事务管理 :

可以在调用业务方法前开启事务,方法执行完成后提交事务

AOP术语

切面(Aspect):

切面是用于编写切面逻辑的一个类,这个类很类似于JDK动态代理中的回调处理器或者cglib中的方法拦截器,主要就是将需要增强目标对象的功能代码编写在这个类中,而这些功能增强的代码就是切面逻辑。

通知/增强(Advice):

增强就是对目标行为植入额外的逻辑代码,从而增强原有的功能。增强分为五种类型:

1)前置通知(在目标方法调用之前执行)

2)后置通知(在目标方法正确返回之后执行)

3)环绕通知(在目标方法调用前后执行)

4)异常通知(当目标方法抛出异常时执行,并且不会执行后置通知)

5)最终通知(不管目标方法有无异常都会执行)

切入点(Pointcut):

切入点类似一个切入的坐标,目的就是要找到目标对象的哪些方法进行切入。切入点可以使用表达式进行描述。

连接点(Joinpoint):

目标对象的方法(被切入的方法)就称之为连接点,一个切入点可以对应目标对象的的多个连接点。

代理(Proxy):

在运行时动态创建的对象,称之为代理对象,负责调用目标对象的方法,并执行增强功能。

目标(Target):

被代理的对象就是目标对象。

织入(Weaver):

将切面中的增强逻辑应用到目标具体的连接点上并产生代理的过程称之为织入。

因此通常描述为“将通知织入到具体的目标”。

织入的时机可以分为以下几种:

  1. 类加载时织入,需要特殊的类加载器(LTW)

  2. 编译时织入,需要特殊的编译器(CTW)

  3. 运行时织入,通常使用JDK或者CGLIB在程序运行创建代理对象,

    spring就是基于运行时织入的。(注意:spring仅仅只是用到了AspectJ的切入点表达式和注解,但并没有使用AspectJ的类加载和编译时织入功能,而是使用JDK和CGLIB在运行时生成代理对象。)

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

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

相关文章

【数据结构(四)】前缀、中缀、后缀表达式(逆波兰表达式)和逆波兰计算器的代码实现(2)

文章目录 1. 前缀表达式(波兰表达式)1.1. 前缀表达式的计算机求值 2. 中缀表达式3. 后缀表达式(逆波兰表达式)3.1. 后缀表达式的计算机求值3.2. 逆波兰计算器的实现 4. 中缀表达式 转 后缀表达式4.1. 思路分析4.2. 代码实现 5. 逆波兰计算器的完整版 1. 前缀表达式(波兰表达式)…

手写数字可视化_Python数据分析与可视化

手写数字可视化 手写数字流形学习 手写数字 手写数字无论是在数据可视化还是深度学习都是一个比较实用的案例。 数据在sklearn中,包含近2000份8 x 8的手写数字缩略图。 首先需要先下载数据,然后使用plt.imshow()对一些图形进行可视化: 打开c…

Mysql 锁机制分析

整体业务代码精简逻辑如下: Transaction public void service(Integer id) {delete(id);insert(id); }数据库实例监控: 当时通过分析上游问题流量限流解决后,后续找时间又重新分析了下问题发生的根本原因,现将其总结如下&#xf…

XDR 网络安全:技术和最佳实践

扩展检测和响应(XDR)是一种安全方法,它将多种保护工具集成到一个统一的集成解决方案中。它为组织提供了跨网络、端点、云工作负载和用户的广泛可见性,从而实现更快的威胁检测和响应。 XDR的目标是提高威胁检测的速度和准确性&…

Arduino驱动防水型SHT20温湿传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 SHT20防水型温湿传感器,采用新一代Sensirion湿度和温度传感器,配有4代CMOSens芯片。除了配有电容式相对湿度传感器和能隙温度传感器外,该芯片还包含一个放大器、A/D转换器、OTP内存和数字处理单元,可精确测量周…

Linux系统介绍及文件类型和权限

终端:CtrlAltT 或者桌面/文件夹右键,打开终端 切换为管理员:sudo su 退出:exit 查看内核版本号:uname -a 内核版本号含义:5 代表主版本号;13代表次版本号;0代表修订版本号;30代表修订版本的第几次微调;数字越大表示内核越新. 目录结构 /bin:存放常用命令(即二进制可执行程序…

C/C++内存管理(2):`new`和`delete`的实现原理

new和delete操作自定义类型 class Stack { public:Stack(int capacity 3):_top(0), _capacity(capacity){cout << "Stack(int capacity 3)" << endl;_a new int[capacity];}~Stack(){cout << "~Stack()" << endl;delete _a;_to…

openssl+ RSA + linux 签名开发实例(C++)

文章目录 一、opensslRSA理论基础二、openssl RSA 签名开发实例 一、opensslRSA理论基础 RSA签名是一种非对称加密算法&#xff0c;用于在信息传输过程中验证消息的完整性和真实性。以下是RSA签名的理论基础的主要知识点&#xff1a; RSA密钥对&#xff1a; RSA使用一对公钥和…

pcie-2-rj45速度优化

背景: 目前用iperf3打流传输速率达不到要求,千兆实际要求跑到800M以上: 优化方案: 1.优化defconfig: 首先编译user版本验证看是否正常 debug版本关闭CONFIG_SLUB_DEBUG_ON宏控。 2.找FAE ,通过更换驱动,或者更新驱动来优化 3.绑定大核: 以8125网卡为例,udp…

【Unity】IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍

IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍 IBeginDragHandler、IDragHandler 和 IEndDragHandler 是 Unity 引擎中的三个接口&#xff0c;用于处理 UI 元素的拖放事件。这些接口通常结合使用&#xff0c;构成了 Unity 引擎的拖放事件系统。 IBeginDragHandler…

java--权限修饰符

1.什么是权限修饰符 就是是用来限制类中的成员(成员变量、成员方法、构造器、代码块...)能够被访问的范围。 2.权限修饰符有几种&#xff1f;各自的作用是什么&#xff1f; private<缺省<protected<public(范围由小到大)

什么年代了,还不会 CI/CD 么?

目录 什么是 CI/CD&#xff1f; CI/CD 对业务有哪些好处&#xff1f; 一&#xff1a;确保卓越的代码质量 二&#xff1a;更快的发布速度 → 更快的交付 三&#xff1a;自动化降低成本 四&#xff1a;故障隔离 五&#xff1a;简化回滚 六&#xff1a;持续反馈 七&#…

设计模式——行为型模式(二)

6.8 迭代器模式 6.8.1 概述 定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 6.8.2 结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggreg…

C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色)

目录 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 项目 代码 下载 其他 C# Onnx PP-Vehicle 车辆分析&#xff08;包含&#xff1a;车辆检测&#xff0c;识别车型和车辆颜色&#xff09; 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…

009 OpenCV 二值化 threshold

一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在机器视觉应用中&#xff0c;OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理&#xff0c;以此大幅降低图像的数…

ASP.NET Core 启用CORS

浏览器的安全阻止一个域的本地页面请求另外不同域的本地页面&#xff0c;这个限制叫同源策略&#xff0c;这个安全特性用来阻止恶意站点从别的网站读取数据 例如假如我有一个页面叫A.html https://foo.example/A.html 现在页面A.html有一个ajax代码尝试读取B.html的HTML的源…

【PyQt】(自定义类)阴影遮罩

写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask&#xff1a; from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

leetcode:合并两个有序链表

题目描述 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目分析 这个算法思路很简单&#xff1a;就是直接找小尾插 定义一个tail和head&#xff0c;对比两个链表结点的val&#xff0c;小的尾插到tail->next&#xff0c;如果一个链表…

每日一题:LeetCode-589.N叉树的前序遍历序列构造二叉树

每日一题系列&#xff08;day 01&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

企业微信身份验证

本篇主要是在上一篇获取第三方凭证基础上&#xff0c;用户通过三方网站自定义授权登录后获取用户信息&#xff0c;以实现用户绑定登录功能。 构造第三方应用授权链接 如果第三方应用需要在打开的网页里面携带用户的身份信息&#xff0c; 第一步需要构造如下的链接来获取授权c…