孙哥Spring源码第27集

news2024/12/24 9:37:31

第27集、手写实现AOP

【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、手写实现AOP的缺点有哪些?

  1. 增加额外功能时,会对所有的方法 都加入对应的功能
    问题 不灵活 (事务 CUD 加入 R 不应该加入)

  2. 额外功能添加的位置 僵化(固定)

2、增加额外功能,会对所有的方法都加入对应的功能,问题不灵活(事务CRUD加R不应该加入)如何解决呢?

手工配置的想灵活配置只能通过切入点进行控制。

2.1、如何在BeanPostProcessor中拿到切入点呢?

  • 1、直接new【耦合】
    2、由Spring生产,那么BeanPostProcessor如何获得呢?
    • 2.1、使用@Autowired,让AutowireAnnotationBeanPostProcessor为另外一个BeanPostProcessor显然是有问题的。
    • 2.2、使用Aware,但是不推荐使用ApplicationContextAware,为什么?
      • 因为ApplicationContextAware处理靠的是ApplicationContextAwareProcessor,不能让BeanPostProcessor处理BeanPostProcessor
      • 解决:通过BeanFactoryAware
      • image-20230516192350142

3、额外功能位置僵化,代码写死了怎么解决?

通过BeanFactoryAware获取beanFactory然后获取额外功能,通过接口来解决代码写死功能位置僵化等问题。

image-20230516192459467 image-20230516191501052

4、切面的概念是切入点+额外功能他们如何做的更加优雅呢?

  • 参考源码封装成PonitCutAdvisor
  • 为什么切点可以直接new PonitCut?
    • 因为有n多个子类
  • 为什么不new反而需要advice注入一下?
    • 因为advice是功能增强,全局一个就可以了,源码里面也是这么写
    • image-20230516193042077
    • 参考自己写的
      • image-20230516193300390

5、为什么PointCut可以new呢?

因为已经限定类型了,形成了单一职责

image-20230516193519302 image-20230516193720041

6、如果我不仅有Before还有After切入点怎么办?

目前只能使一个

image-20230516194831969

现在的话就可以做一个切面的链条,参考springAOP源码

image-20230516203209325

7、解决自己给自己做代理

image-20230516203112348

8、多次调用问题

image-20230516203925187

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

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

相关文章

聊聊JDK19特性之虚拟线程 | 京东云技术团队

1.前言 在读《深入理解JVM虚拟机》这本书前两章的时候整理了JDK从1.0到最新版本发展史,其中记录了JDK这么多年来演进过程中的一些趣闻及引人注目的一些特性,在调研JDK19新增特性的时候了解到了虚拟线程这个概念,于是对虚拟线程进行学习整理内…

LLM项目代码改写

背景: 最近在做代码大语言模型生成项目代码的课题。代码生成现在大部分的工作是在做即时代码生成,这个有点类似代码智能提示,只不过生成的可能是一段片段代码;然而对于整个项目代码的生成做的团队并不多,原因大致如下…

Jenkin 添加节点报错No Known Hosts file was found

/var/lib/jenkins/.ssh/known_hosts [SSH] No Known Hosts file was found at /var/lib/jenkins/.ssh/known_hosts. Please ensure one is created at this path and that Jenkins can read it. /var/lib/jenkins/.ssh/known_hosts 存了是已经接受SSH key认证的目标节点&#x…

ASP.NET Core教程:ASP.NET Core 程序部署到Windows系统

框架依赖 一、发布 框架依赖(FDD):即Framework-dependent deployments的缩写。这种发布方式依赖于Framework框架,即要部署的服务器上面必须按照ASP.NET Core 运行时环境(ASP.NET Core Runtime)。这种部署方式是微软默认推荐的。下…

美妆行业在微信小程序中可以实现什么功能

随着移动互联网的发展,微信小程序作为一种轻量级的应用形态,越来越受到商家的青睐。对于美妆行业来说,微信小程序不仅可以提高品牌曝光率,提升用户体验,还可以通过各种功能实现销售转化。下面我们将介绍美妆行业在微信…

软件工程从理论到实践客观题汇总(头歌第一章至第八章)

一、软件工程课程概述 1、计算机软件的变化 2、实践准备-协同开发方法与平台 3、实践准备-群体化代码标注平台 4、实践准备-群体化学习平台 二、从程序到软件 1、程序及其质量 2、程序质量保证方法 3、程序质量分析方法 4、软件及其质量 5、开源软件 三、软件工程概述 1、…

通讯网关软件018——利用CommGate X2MQTT实现MQTT访问OPC Server

本文介绍利用CommGate X2MQTT实现MQTT访问OPC Server。CommGate X2MQTT是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,SCADA系统配置OPC Server,现在上位机需要通过MQTT Subscr…

ORACLE中SQL运算符的优先级

SQL运算符优先级: 注: 1、可以使用括号改变优先级顺序 2、可以看出OR的优先级最低,算术运算符的优先级最高 另:操作符优先级 * / - 1、乘除的优先级高于加减; 2、同一优先级运算符从左向右执行; 3、括号内的…

yolo_tracking中osnet不支持.pth格式,而model_zoo中仅有.pth

yolo_traking-7.0中REID模块用到了osnet,track.py中模型文件不支持.pth,而model_zoo中仅有.pth,改动代码太麻烦了,网上查到的.pth文件转化为.pt文件都需要读取网络架构,不太可能实现。 读取osnet_x0_25_msmt17.pth发现…

(高阶) Redis 7 第21讲 IO多路复用模型 完结篇

🌹 以下分享 Redis IO多路复用模型,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀 IO多路复用模型是什么 I/O:网络IO 多路:多个客户端连接(连接即套接字描述符,即socket或channel),指…

BJT晶体管

BJT晶体管也叫双极结型三极管,主要有PNP、NPN型两种,符号如下: 中间的是基极(最薄,用于控制),带箭头的是发射极(自由电子浓度高),剩下的就是集电极&#xff0…

蓝宝石(白宝石)镜片

蓝宝石 ( AL2O2 三氧化二铝 ) (注意透光波段 5um以下) 特此记录 anlog 2023年10月7日

解决:使用WileyNJDv5_Template模板时,无法生成pdf文件。

目录 问题: 解决办法: 检查过程: WileyNJDv5-Template模板链接:New Journal Design LaTeX template (wiley.com) 问题: 使用wileyNJDv5_Template模板时候,无法生成pdf文件。无论是使用texlivetexmaker还…

2023年中国石化行业节能减排发展措施分析:用精细化生产提高生产效率,降低能耗[图]

2022年,我国石油和化工行业克服诸多挑战取得了极其不易的经营业绩,行业生产基本稳定,营业收入和进出口总额增长较快,效益比上年略有下降但总额仍处高位。2022年,我国石油化工行业市场规模为191761.2亿元,同…

【Vue面试题七】、SPA (单页面) 首屏加载速度慢怎么解决?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:SPA首屏加载速度慢的怎么…

【Python_PySide2学习笔记(十八)】勾选按钮QCheckBox类的基本用法

勾选按钮QCheckBox类的基本用法 前言正文1、创建勾选按钮2、勾选按钮获取选中状态3、创建按钮组4、按钮组添加勾选按钮5、按钮组设置单选6、按钮组信号:选中状态改变7、按钮组获取所有勾选按钮7.1、获取勾选按钮对象7.2、获取勾选按钮文本7.3、获取勾选按钮ID7.4、按…

超越bash:让你的命令行更聪明

本周岛主给大家带来一款能够提高工作效率的神器——zsh 在今天的计算机领域,命令行终端是一个不可或缺的工具。尽管现代计算机的用户界面变得越来越友好,但对于高级用户来说,命令行终端仍然是一种更加高效、灵活的工作方式。在命令行终端中&…

进阶指针(五)—— 指针笔试题

✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 🎈相关博文:进阶C语言(一)、进阶C语言(二)、进阶C语言(三)、进阶指针(四&#xff0…

问题即机会,中国充电服务商加速向上

10月4日,能链智电与香港特别行政区引进重点企业办公室(简称:“引进办”)达成合作,成为首批重点引进企业。 引进办是香港特区政府引进世界各地高潜力重点企业来港的窗口,从这则消息可以看出,新能…

OpenCV 13(模版匹配和霍夫变换)

一、模版匹配 所谓的模板匹配,就是在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域…