23.AOP

AOP

AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术

OOP:纵向继承 AOP:横向抽取

相关术语

  • 横切关注点:从每个方法中抽取出来的同一类非核心业务。在同一个项目中,我们可以使用多个横切关注点对相关方法进行多个不同方面的增强(这个概念不是语法层面天然存在的,而是根据附加功能的逻辑上的需要:有十个附加功能,就有十个横切关注点)

  • 通知:每一个横切关注点上要做的事情都需要写一个方法来实现,这样的方法就叫通知方法

    • 前置通知:在被代理的目标方法前执行
    • 返回通知:在被代理的目标方法成功结束后执行
    • 异常通知:在被代理的目标方法异常结束后执行
    • 后置通知:在被代理的目标方法最终结束后执行
    • 环绕通知:使用try...catch...finally结构围绕整个被代理的目标方法,包括上面四种通知对应的所有位置

在这里插入图片描述

  • 切面:封装通知方法的类

  • 目标:被代理的目标对象
  • 代理:向目标对象应用通知之后创建的代理对象
  • 连接点:这也是一个纯逻辑概念,不是语法定义的。把方法排成一排,每一个横切位置看成x轴方向,把方法从上到下执行的顺序看成y轴,x轴和y轴的交叉点就是连接点

  • 切入点:定位连接点的方式。每个类的方法中都包含多个连接点,所以连接点是类中客观存在的事物(从逻辑上来说)。 如果把连接点看作数据库中的记录,那么切入点就是查询记录的 SQL 语句。 Spring 的 AOP 技术可以通过切入点定位到特定的连接点。切点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条件

作用

简化代码:把方法中固定位置的重复的代码抽取出来,让被抽取的方法更专注于自己的核心功能,提高内聚性

代码增强:把特定的功能封装到切面类中,看哪里有需要,就往上套,被套用了切面逻辑的方法就被切面给增强了

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

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

相关文章

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表,去掉 spatial_ref_sys ,要不然需要先drop在创建,可能会报错。 一般不会去导函数,如果有个别自己创建的函数可以手动复制一下,全部导的话…

音视频技术开发周刊 | 302

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程 Code Interpreter 已经正式开放。 上海世界AI大会:MidJourney…

加水印用什么软件你知道吗?告诉你加水印的app哪个好用吧

笑笑是一个热爱生活的女孩,她经常会随手拍下生活的瞬间,并且在社交媒体上分享自己的开心时刻。然而,最近她发现自己的照片被未经授权地使用在其他网站和博客上。这让她感到非常生气。为了保护自己的作品权益,她决定寻找一个好用的…

Qt6 Qt Quick UI Prototype学习QML第一篇

Qt6 Qt Quick UI原型学习QML第一篇 开始创建项目Qt Quick UI原型简介.qmlproject文件举例Window平台小例子运行效果QML语法 了解语法 开始创建项目 创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当…

【C语言】Sleep()函数----详解

🍁 博客主页:江池俊的博客 🍁收录专栏:C语言——探索高效编程的基石 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 前言 📌C语言sleep函…

群雄逐鹿,全球 “电竞之都”将花落谁家?

提到深圳,你会想到什么? 四十多年前的小渔村、改革开放排头兵,还是由科技驱动的经济特区? 这些头衔都已经司空见惯了,接下来深圳预计还将有个最新名号——国际电竞之都,这是一个让无数年轻人听到就会兴奋…

虚拟机ubuntu1804打开联合标定工具箱的步骤(toolkit)

1、运行roscore roscore 2、进入到calibration文件夹打开终端 source devel/setup.bash3、运行rosrun打开即可 rosrun calibration_camera_lidar calibration_toolkit

二层交换机和三层交换机区别

一、指代不同 1、两层交换机:工作于OSI模型的第2层(数据链路层),故而称为二层交换机。 2、三层交换机:具有部分路由器功能的交换机,工作在OSI网络标准模型的第三层。 二、功能不同 1、两层交换机&#xff1…

远程办公保持高效的15个小技巧

远程办公提供了在固定办公可能无法体验到的多种自由。灵活的时间安排,只要你完成当天的工作,其它时间你可以任意安排。没有通勤压力,不用挤公交或地铁,省了交通费,还有让你睡个懒觉,有时间做更健康的早餐&a…

【网络编程】传输层协议——TCP协议

文章目录 一、TCP协议格式1.1 TCP如何将报头与有效载荷进行分离?1.2 有效载荷如何向上交付?1.3 TCP报头的理解1.4 序号与确认序号1.4.1 网络不可靠问题1.4.2 32位序号1.4.2 32位确认序号 1.5 窗口大小1.6 六个标志位 二、确认应答机制(ACK&am…

从Vue2到Vue3【零】——Vue3简介

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建 文章目录 系列文章目录前言一、Vue3的发布带来了什么1.1 性能提升1.2 源码升级1.3 支持TypeScript1.4 新特性1.5 支持 vue3 的UI组件库 二、创建Vue3.0工程2.1 什么是Vite2.2 利用Vite创建Vue3.0工程2.3 利用vue-cli脚…

C++中main()函数和命令行参数介绍

C中main()函数和命令行参数介绍 在C中,main()函数是程序的入口点,它是一个特殊的函数,在程序开始执行时被首先调用,也是程序结束时的最后一个被执行的函数。main() 函数的类型始终为 int,根据C标准,main() …