前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring AOP插件开发案例,带你感受不一样的 AOP

Spring AOP插件开发案例,带你感受不一样的 AOP

原创
作者头像
Java4ye
修改于 2024-02-13 04:25:58
修改于 2024-02-13 04:25:58
2650
举报
文章被收录于专栏:Spring家族Spring家族

小伙伴们好呀,今天 小羊 来分享这个 Spring AOP 插件篇 啦😝

项目一览

这个 demo 分为两个模块 :

👉 插件模块 springboot-aop-plugin

👉 业务模块 springboot-aop-plugin-used

模块功能介绍

👉 插件模块 springboot-aop-plugin 里面提供两个插件

  1. 插件 A MethodCountingTimesPlugin : 统计方法调用次数
  2. 插件 B MethodSpendTimePlugin : 计算调用方法所花费的时间

👉 业务模块 springboot-aop-plugin-used

  1. 提供业务 API
  2. 插件配置类,主要负责 解析
  3. 插件工厂,主要负责 加载,激活和停用插件

使用

插件模块 打包成一个 jar 包,然后在 业务模块 中配置好 plugins.jsonjar 包地址,随后 激活/停用插件,就可以在控制台看到不同的输出效果啦😄

原理图 👇

主要知识点

  1. 类加载器
  2. Spring AOP 编程式

效果演示

API 如下🐖
激活插件1

调用方法时会统计该方法的调用次数

关闭插件1
再次激活插件1

顺便激活插件2 效果

还挺好玩的 哈哈 其他就等小伙伴们自己优化了 🐷

主要源码说明

MethodCountingTimesPlugin 插件通过实现这个 MethodBeforeAdvice 来达到 @Before 注解的效果

MethodSpendTimePlugin 插件通过实现这个 MethodInterceptor 来达到 @Around 注解的效果

这部分的知识点可以看上篇文章 👉《Spring AOP内功修炼!!》

代码也很简单,就不多介绍啦👇

PluginConfig

这个配置类呢,就是在初始化时去加载,解析这个配置文件 plugins.json,然后放到这个 map 中

DefaultPluginFactory

激活插件方法如下 👇

也就是通过这个 编程式AOP 来实现

完整项目在 Github 上,链接在文末自取就可以啦~

接下来说说搭建这个小demo 遇到的坑🕳

坑🕳

  1. 打包插件模块,这里我们用到的是 spring-boot-maven-plugin 插件,打包时会去查找有 main 方法的类,并修改 jar 包结构为 BOOT-INF/classes/ ,这样打出来的包,会导致加载插件时无法解析出增强类,一直都是 ClassNotFoundException
  2. ClassLoader 的不同,本次 demo 使用的是 JDK11,而在 JDK11 中,AppclassLoader 无法再转换为 URLClassLoader ,区别如下👇

JDK11

JDK8

所以在 JDK11 中无法通过将 AppclassLoader 转换成 URLClassLoader 去判断有没有加载过某个 jar 包

问题思考

完成这个 demo 后,4ye 对 AOP 又有了以下的这些思考~

一. AOP 发生的条件

我们都知道 AOP面向切面编程 ,所以我们得告诉它往哪里切,才有机会创建这个 代理对象 出来~

比如 Spring 提供的这几个注解

  • 事务 @Transactional
  • 异步 @Async
  • 缓存 @Cacheable , @CacheEvict@CachePut , @Caching

这些在 spring-aspects 模块中

关于 Spring 的模块可以参考这篇文章 👉《Spring的这七大模块你了解吗?》

同时,创建代理对象时,CGLIB 只能代理 非final 类中的 非final非static 方法。

二. 为啥采用编程式的AOP

这就突出它的优点啦!毕竟编程式才是最灵活的 哈哈。就像 编程式事务 一样,你可以控制事务的粒度,在编程式 AOP 中,你可以控制 Advice 的启动,停止。

三. 优化地方
  1. MethodCountingTimesPlugin 中是通过 map 来存放不同方法的调用次数的,这个 key 需要考虑怎么和方法挂钩起来,并且唯一 (待优化)
  2. 实现配置文件的热更新,以及刷新缓存的 Advice (待优化)

新发现

我们这篇的主题是插件,插件可插拔的特点十分方便,同时,我们利用 ClassLoader 实现了 热加载!

但是呢,我了解到它不仅仅有这个功能,它还可以实现对 class 文件的加解密,同时 4ye 也是间接了解到这个 阿里的 pandora 以及解锁了新的源码篇章 spring boot devtools ,很有意思的,争取早点分享出来 嘿嘿 😋

总结

通过该项目来实现这个 AOP 插件,学会了一项装13技能 哈哈哈

最后

本文就分享到这里啦🐖

仓库地址 👇 (感谢每一颗 star !

https://github.com/Java4ye/springboot-demo-4ye

喜欢的小伙伴别忘了 点赞,收藏,关注 支持下博主呀!😝

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
H5 游戏开发 2:搭建 Egret 开发环境
在上一期的“H5 游戏开发”教程中,猫哥介绍了如何通过 Whistle 工具对 Egret 文档进行资源修复和搜索增强。本期,我们以 Hello World 项目为例,看看如何搭建一个好用的 Egret 项目开发环境。
猫哥学前班
2020/02/11
5.1K1
H5 游戏开发 2:搭建 Egret 开发环境
H5游戏开发:游戏引擎入门推荐
很多刚刚接触到游戏开发,准备大展拳脚的小鲜肉们,往往在技术选型这第一关就栽了跟头。毕竟网络上的游戏引擎良莠不齐,官网上相关资料也比较少,而选择一个适合的游戏引擎是一个项目最基础,也是很核心的一部分。 试想一下,在游戏开发进行到中后期的时候,才发现项目引入的游戏引擎与需求相悖,这时候不管是重新做一些修修补补的工作或者更换游戏引擎,这都是相当耗费人力物力的一件事。为了避免这种情况的出现,在前期选择适合项目需求的游戏引擎显得尤为重要。 接下来我们来聊一聊如何去选择适合项目的 JS 游戏引擎。
bering
2019/12/02
6.7K1
盘点 小游戏开发引擎
游戏越来越成为人们生活必不可少的一部分,游戏的类型也愈加丰富,进行游戏的方式也越来越便捷。而小程序技术的推广使得游戏的开发又多了一种选择。小程序上的小游戏无需下载安装,即点即玩,似乎更加符合现代人的需求。下面就来简单盘点一下4款小游戏开发引擎:
Lydiasq
2022/12/01
1.6K0
盘点 小游戏开发引擎
由爆火的“羊了个羊”浅谈小游戏开发
自9月初突然爆火以来,小程序游戏“羊了个羊”一路高歌猛进,日活跃用户数量最高曾一度破亿;仅两天时间,就在微博上就斩获18个关联热搜。
用户10245619
2022/12/05
1.9K0
由爆火的“羊了个羊”浅谈小游戏开发
小游戏引擎如何选?看完这篇就够了
前面写了几期有关于小游戏的文章,主要从小游戏开发、小游戏运营、小游戏变现等多个角度进行了较为粗略的介绍,很多同学表示对小游戏引擎部分很感兴趣,希望能够有一些更为深入的分析介绍。今天就对目前主流的小游戏引擎进行探讨。
Onegun
2023/01/03
4.5K0
小游戏引擎如何选?看完这篇就够了
写给对 ”游戏开发” 感兴趣的朋友们
原文链接:https://mp.weixin.qq.com/s/wSp-UKiIlufnIC3KPY-WTQ
Python进击者
2019/06/21
1.2K0
写给对 ”游戏开发” 感兴趣的朋友们
小游戏开发概述 - 笔记
引擎的诞生就是因为一家公司做了一款游戏,做下一款游戏时复用了上一款游戏的代码,后来发现这些代码几乎每个游戏都会用到,抽离出来就成了一个引擎。
TagBug
2023/03/17
1K0
小游戏开发概述 - 笔记
盘点| 爆款小游戏的开发引擎
微信推出小游戏已有4年,期间不断涌现爆款。作为可以不用下载安装直接在线玩的小程序游戏,小游戏渐渐成为不少人的心头好。今天就来盘点一下那些爆款小游戏用到的游戏开发引擎:
Lydiasq
2022/12/06
2.5K0
盘点| 爆款小游戏的开发引擎
微信小游戏开发技术与应用
本周四我们举行了《Cocos Creator微信小游戏开发入门》公开课 受到了同学们的一致好评! 纷纷跑来打听“八卦消息问”微信小游戏课程何时上线... 本期干货我们就带大家来简单了解 《微信小游戏开
腾讯NEXT学位
2018/07/06
2.4K0
微信小游戏开发技术与应用
微信小游戏、H5小游戏、微信小程序之间的关系及区别,以及相关主要技术点及应用学习讨论。
Techeek
2018/03/19
8.4K14
微信小游戏开发技术与应用
H5游戏与小游戏之间的技术区别
那么为什么依附小程序产生的小游戏可以有这么大的关注度呢?先不论桌面端和APP端,与HTML5有相近的小程序游戏又怎么能频繁爆火到有这么大的流量呢?
用户10236691
2022/12/06
1.2K0
H5游戏与小游戏之间的技术区别
游戏开发完整学习路线(各个版本都有)
在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。 一 平台与编程语言选择 首先,游戏开发的平台就有很多类型:  个人主机平台:Windows、Linux、Mac OC; 移动平台:iOS、Android、Windows Phone、BlackBerryOS、Symbian; 专业主机平台:Xbox、PlayStation、Will等。 如果你想从事移动平台的游戏开发,An
用户1198337
2018/01/19
3.1K0
游戏开发完整学习路线(各个版本都有)
王者荣耀用什么开发的?一文盘点客户端引擎
对于有些刚毕业的同学虽然有着一腔热情做游戏,但是不了解游戏行业,也不知道从何下手,也不知道怎么学,至于游戏行业的概述可以看我之前的文章,但是客户端都有哪些游戏引擎,这些引擎的特点是什么,该学习哪些呐?今天我们就详细的聊聊,希望对于想进游戏行业的程序同学一些方向。
香菜聊游戏
2021/05/26
6.2K0
王者荣耀用什么开发的?一文盘点客户端引擎
【Golang语言社区前端编程】如何选择 H5 游戏引擎
原生手游市场已是红海,腾讯、网易等寡头独霸天下,H5游戏市场或将成为下一个风口。据笔者所知,很多H5游戏开发团队由于选择引擎不慎导致项目甚至团队夭折。如何选择适合团队和项目的引擎,笔者通过学习和项目实践,总结微薄经验,供大家参考,非技术人员也可以将本篇内容作为引擎选择的重要关注点。 选择H5游戏引擎的思考维度 1、开发语言的支持 2、2D、3D、VR的支持 3、性能 4、引擎的应用广度 5、设计理念 6、工作流支持力度 7、商业化成熟案例 8、学习资源与技术支持能力 首先,我们要知道,当前主流的游戏引擎有哪
李海彬
2018/03/27
2.5K0
HTML5 游戏引擎深度测评
最近看到网上一篇文章,标题叫做《 2016年 最火的 15 款 HTML5 游戏引擎 》。目前针对HTML5游戏的解决方案已经非常多,但谁好谁差却没有对比性资料。特意花了几天时间,针对文章中出现的12款免费开源引擎做了一次相对完整的对比分析,希望能对大家有所帮助。 针对技术类产品对比,通常有多个维度进行对比,不仅仅是技术层面,还有许多非技术层面的内容会影响我们的使用结果。本文从如下几个维度进行多重对比。 2D与3D 编程语言 设计理念&功能 工作流 性能 学习资料 商业应用 2D与3D、编程语言对比 2D与
李海彬
2018/03/22
6.3K0
HTML5 游戏引擎深度测评
Shopee Games 游戏引擎演进之路
Shopee Games 当前以休闲类游戏为主,为了减少对 Shopee App 体积的影响,技术选型上会偏向于 H5 游戏。而如何选择 H5 游戏引擎,我们主要考量以下几个方面的因素:
Shopee技术团队
2022/03/04
1.7K0
Shopee Games 游戏引擎演进之路
从零开始开发一个小游戏有什么难点
如果仅仅针对个人开发者来讲,要独立开发一款大型游戏几乎无可能,更大成功的可能还是开发一款类似《羊了个羊》这样洗脑的小程序游戏。
Onegun
2022/12/12
1.5K0
从零开始开发一个小游戏有什么难点
【游戏编程板块】关于游戏开发的客户端/服务器端的版本控制
【客户端】 1.关于游戏引擎 在15年3月开始准备做h5游戏的时候,首先遇到的问题就是引擎选型的问题。 当时市面上的2d引擎主要有3个:白鹭egret,layabox和cocos2d-js。 一方面,是因为我以前用cocos2d-x(c++)做了一年多的手游客户端,所以,很自然就选择了cocos2d-js。另一方面,是因为当时市面上其他两个引擎的成功项目还不多。 cocos引擎的每一次版本更新,我们都会第一时间在我们的游戏里面进行测试。 如果发现游戏在android手机上的性能有明显提升,我们就会跟着引擎版
李海彬
2018/03/27
2.9K0
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
在移动互联网迅猛发展的当下,H5 游戏凭借其无需下载、即点即玩的特性,成为了游戏领域中一股不可忽视的力量。无论是在碎片化时间里打发闲暇,还是在社交互动中增添乐趣,H5 游戏都发挥着重要作用。而这背后,是一系列先进的开发技术在支撑。H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
山东布谷科技_孙哥
2025/03/04
2050
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
游戏开发学习路线
游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指引,是可以事半功倍的。
全栈程序员站长
2022/08/03
2.7K0
游戏开发学习路线
相关推荐
H5 游戏开发 2:搭建 Egret 开发环境
更多 >
LV.1
腾讯高级开发工程师
目录
  • 项目一览
  • 模块功能介绍
  • 使用
  • 原理图 👇
  • 效果演示
    • API 如下🐖
    • 激活插件1
    • 关闭插件1
    • 再次激活插件1
  • 主要源码说明
    • PluginConfig
    • DefaultPluginFactory
  • 坑🕳
  • 问题思考
    • 一. AOP 发生的条件
    • 二. 为啥采用编程式的AOP
    • 三. 优化地方
  • 新发现
  • 总结
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档