AOP面向切面编程

news2024/11/17 11:31:30

AOP 面向切面编程

AOP是什么

AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP、OOP 在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
而 AOP 则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。
面向切面编程的好处就是: 减少重复,专注业务;
注意:面向切面编程只是面向对象编程的一种补充。
核心原理
使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑.
使用案例:
事务处理:开启事务,关闭事务,出现异常后回滚事务
权限判断:在执行方法前,判断是否具有权限
日志:在执行前进行日志处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LVOIwIcr-1673177399592)(C:\Users\dell\Desktop\自写笔记\暑假笔记\框架\Spring系列\1673176668030.png)]

AOP能做什么

假如没有aop,在做日志处理的时候,我们会在每个方法中添加日志处理

1

但大多数的日子处理代码是相同的,为了实现代码复用,我们可能把日志处理抽离成一个新的方法。但是这样我们仍然必须手动插入这些方法。

2

但这样两个方法就是强耦合的,假如此时我们不需要这个功能了,或者想换成其他功能,那么就必须一个个修改。
通过动态代理,可以在指定位置执行对应流程。这样就可以将一些横向的功能抽离出来形成一个独立的模块,然后在指定位置插入这些功能。这样的思想,被称为面向切面编程,亦即AOP。

3

为了在指定位置执行这些横向的功能,需要知道指定的是什么地方

4

例如上图,方法级别的aop实现,在一个程序执行链条中,把method2称为切点,也就是说在method2执行时会执行横切的功能,那么是在method2之前还是之后呢,又是执行什么呢?这些都由advice(通知)来指定。advice有5种类型,分别是

通知类型简介
Before(前置通知)目标方法调用之前执行
After(后置通知)目标方法调用之后执行
After-returning(返回通知)目标方法执行成功后执行
After-throwing(异常通知)目标方法抛出异常后执行
Around(环绕通知)相当于合并了前置和后置

把切点和通知合在一起就是切面了,一个切面指定了在何时何地执行何种方法。

AOP的基本概念

连接点(Joinpoint):类中可以被增强的方法,这个方法就被称为连接点
切入点(pointcut):类中有很多方法可以被增强,但实际中只有 add 和 update被增了,那么 add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通知分为方法执行前通知,方法执行后通知,环绕通知等. 切面(Aspect):把通知添加到切入点的整个过程称为切面.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象

代理(Proxy): 向目标对象应用通知时创建的代理对象

参考链接:
https://blog.csdn.net/baidu_33403616/article/details/70304051

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

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

相关文章

【Linux】-- 环境变量

目录 环境变量 常见环境变量 HOME 和环境变量相关的命令 通过代码如何获取环境变量 环境变量参数 通过第三方变量environ获取 通过getenv函数来特定访问获取 通过setenv函数来特定访问获取 环境变量 命令:which ls 将命令ls的完整路径写入到标准输出。 #in…

用R语言理解洛必达法则

文章目录5 洛必达法则极限的种类洛必达法则作用于幂函数5 洛必达法则 极限的种类 令NNN为常数,则常规的极限运算大致有以下几种 ∞N∞∞⋇N∞(N̸0)N∔∞∞N−∞−∞N/∞0N/0∞N∞∞(N̸1)∞N∞(N̸0)\begin{matrix} &\infty\pm N\infty\quad&\infty\divi…

MySQL版本由5.7.37更新到5.7.39

一、前景 由于mysql5.7.37存在漏洞,影响系统安全,所以需要将mysql版本升级到5.7的最新版本5.7.39。 二、步骤 1、下载5.7.39的安装包: 下载链接如下: https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.39-1.el…

node基础知识

node基础知识 node在真实项目中的应用 webpack基于node环境 用nodejs的语法合并压缩打包 js放到客户端浏览器中执行 放到服务器端运行:java因为jdk php因为tomcat c#因为有.net framework 项目架构1:中小型项目-基于nodejs构建全栈 项目架构2&#xff1a…

mysql转DM达梦数据库+springboot兼容DM数据库+springboot兼容activity5.22.0

由于现在做的项目中需要针对数据库进行国产化操作,最终完成从mysql到达梦的迁移,记录整合迁移记录如下:安装初始化达梦数据库(傻瓜式安装即可)安装达梦数据库(windows、linux)初始化数据库实例关…

代码质量与安全 | 新时代:2023年商业软件开发的五大关键目标

进入2023年,技术趋势仍然聚焦于人工智能、边缘智能和气候变化领域,但供应链增速放缓和日益增长的消费者需求阻碍着创新的步伐。为了在行业中保持竞争力,并实现软件工程预定目标,软件开发领导者需要主动制定预算和时间管理计划&…

Java设计模式-模板模式Template

介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行。它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说&#xff…

中移链合约常用开发介绍 (二)多索引表的使用

一、目的本文详细介绍了开发、部署和测试一个地址簿的智能合约的流程,适用于EOS的初学者了解如何使用智能合约实现本地区块链上数据的持久化和对持久化数据的增删改查。二、智能合约介绍区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔…

17.Isaac教程--机器学习流程

机器学习流程 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录机器学习流程模拟训练PC 和边缘设备上的推理使用 TensorRT 进行推理Torch推理使用 Tensorflow 进行推理示例PyCodelet配套代码Tensorflow 推理小码TensorRT 推理小码SampleAc…

23种设计模式(三)——模板方法模式【组件协作】

文章目录意图什么时候使用模板方法真实世界类比常说的钩子模板方法的实现模板方法模式的优缺点亦称: Template Method 意图 它的主要思想是,定义一个操作的一系列步骤,对于某些暂时确定不下来的步骤,就留给子类去实现好了&#x…

位图与矢量图的区别

相信大家在日常的工作过程中,经常会听到位图和矢量图,那么位图和矢量图的区别是什么呢? 1.定义 ①位图:称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这 些点可以进行不同的排…

测试用例设计方法有哪些?举例说明

众所周知,测试用例是编制的一组测试输入、执行条件及预期结果,专门为的是某个特殊目标,即测试某个程序路径,或是核实是否满足某个特定的需求。一般来讲,常用的测试用例设计方法有五种,分别是:正…

微信小程序中如何实现双向绑定

一、双向绑定 在微信小程序中如何实现双向绑定?在开始之前先介绍下什么是双向绑定,js中定义变量数据后,通过{{}}绑定到模板中,这个过程是单向绑定,即数据的更新只能是js中更新了数据,模板中跟着修改。但是如…

深度学习笔记:神经网络(3)

关于本章之前内容可以参考以下之前文章: 1 https://blog.csdn.net/Raine_Yang/article/details/128473486?spm1001.2014.3001.5501 2 https://blog.csdn.net/Raine_Yang/article/details/128584916?spm1001.2014.3001.5501 神经网络的输出层设计 机器学习问题一般…

2022年12月青少年软件编程(Python) 等级考试试卷(三级)

2022. 12 青少年软件编程(Python) 等级考试试卷(三级) 一、 单选题(共 25 题, 共 50 分) 1.列表 L1 中全是整数, 小明想将其中所有奇数都增加 1, 偶数不变, 于是编写了如下图 所示的…

高级树结构之平衡二叉树(ALV树)

文章目录平衡二叉树简介失衡类型&处理办法RR型失衡【左旋调整】调整演示代码实现LL型失衡【右旋调整】调整演示代码实现RL型失衡【先右旋后左旋调整】调整演示代码实现LR型失衡【先右旋后左旋调整】调整演示代码实现插入操作综合代码演示平衡二叉树简介 在数据有序的情况下…

Codeforces Round #842 (Div. 2)

Codeforces Round #843 (Div. 2) 传送门 不想搞的很累&#xff0c;对自己不做要求&#xff0c;有兴趣就做。 A. Greatest Convex #include <bits/stdc.h>using namespace std; const int maxn 1e6 10; vector<int> cnt[maxn]; map<int, int> mp;int mai…

nvm安装 疑难问题解决

nvm介绍 NVM是node.js的版本管理器&#xff0c;设计为每个用户安装&#xff0c;并在每个shell中调用。nvm可以在任何兼容posix的shell (sh、dash、ksh、zsh、bash)上运行&#xff0c;特别是在这些平台上:unix、macOS和windows WSL。 nvm安装 &#xff01;&#xff01;重要&a…

强化学习在智能补货场景的应用

本文作者&#xff1a;应如是&#xff0c;观远算法团队工程师&#xff0c;毕业于伦敦帝国理工学院计算机系&#xff0c;主要研究方向为强化学习、时间序列算法及其落地应用。深耕零售消费品场景&#xff0c;解决供应链运筹优化问题。为客户提供基于机器学习的AI解决方案。1. 背景…

2023.Q1 go语言记录

1. Go 语言数组声明和初始化var variable_name [SIZE] variable_type&#xff0c;eg&#xff1a;var balance [10] float32var balance [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}balance : [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}长度不确定的初始化var balance [...]float…