AspectJ和SpringAOP的区别

aspecj和aop的区别,告诉你每一个织入的时机_哔哩哔哩_bilibili

3种织入时机:

本质

SpringAOP本质是对Di容器中的一系列组件进行拦截,并统一生成代理。

AspectJ的本质是提供一种完全的OOP的编程范式,来实现三种时机的织入。

编译器织入

AspectJ的特殊的编译器,在编译的时候就把切面和.java代码织入到了一起

类加载时织入

类加载是一种懒加载,需要的时候,才对这个类进行加载。AspectJ就提供了一种类加载时织入的方法,我们在resource.META-INF下建立aop.xml把切面写进去。但是普通的编译器和类加载器没办法实现。

所以我们就用探针实现:AspectJ提供了探针,会在执行main之前,执行premain,即main方法的前置方法。

ctrl+B进入这个Agent,看premain方法,帮我们完成织入操作

Agent这个类会帮我们注册一些属性,以后JVM在加载类的时候,会读取aop.xml文件,就知道了有哪些切面要织入到我们的这个类中。

添加探针: 去C:\\*\.m2\repository\org\aspectj\aspect\aspectjweaver\版本号\aspectjweaver-版本号.jar

AspectJ对任何方法都可以进行织入,SpringAOP不一定

SpringAOP的流程

静态代理和动态代理

相关推荐
IT 行者4 小时前
GitHub Spec Kit 实战(五):/speckit.tasks 怎么拆——Spec Kit 五部曲收官
java·ai编程·claude
AC赳赳老秦4 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
提笔了无痕4 小时前
如何用Go实现整套RAG流程
开发语言·后端·golang
(Charon)4 小时前
【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】
java·开发语言
Yeats_Liao5 小时前
Feed流系统设计(三):数据模型与存储设计,从表结构到Redis收件箱
java·javascript·redis
JiaHao汤5 小时前
分布式事务方案全景:从理论到 Seata 落地
java·分布式·spring·spring cloud
2601_961875245 小时前
法考考试时间安排及科目|时间表|资料已整理
开发语言·c#·inverted-index·suffix-tree·sstable·r-tree·lsm-tree
AI科技星5 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi
geovindu5 小时前
go: Generators Pattern
开发语言·后端·设计模式·golang·生成器模式
色空大师6 小时前
【debug调试详解-idea】
java·ide·intellij-idea·调试·远程调试