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的流程

静态代理和动态代理

相关推荐
二哈赛车手1 天前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物1 天前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好1 天前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~1 天前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李1 天前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8291 天前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅1 天前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆1 天前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁1 天前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y1 天前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git