当前位置: 首页 > article >正文

Spring学习笔记_26——LWT

LWT

1 . AOP切面织入方式

  • 编译时:例如使用AspectJ编译器。
  • 加载时:即本文介绍的AspectJ的LoadTimeWeaving (LTW)。
  • 运行时:Spring AOP默认方式,通过动态代理或cglib

2 .介绍

LWT,即运行时织入(Load-time Weaving),是Spring框架中面向切面编程(AOP)的一种实现方式。

3. 原理

使用JDK5新增的java.lang.instrument包,在类加载时对字节码进行转换,从而实现AOP功能。

  • 字节码转换:在应用程序加载到JVM之前,LWT工具会读取并转换应用程序的字节码。这个转换过程包括识别目标类、定位需要织入的切面以及生成修改后的字节码。
  • 切面织入:在字节码转换过程中,LWT工具会将切面中的增强逻辑(如前置通知、后置通知、环绕通知等)织入到目标类的相应方法中。这个织入过程是通过修改目标类的字节码来实现的,因此它可以在运行时动态地改变类的行为。
  • 类加载:经过转换后的字节码会被JVM加载到内存中,并作为应用程序的一部分执行。在执行过程中,JVM会调用已经织入切面的目标类方法,从而触发增强逻辑的执行。

4. 依赖库

  • 需要spring-AOP和aspectJ库,JDK 8及以上版本

5. 优势与特点

  • 灵活性:运行时织入不需要在编译阶段对目标类进行修改,因此可以在不改变源代码的情况下为现有应用程序添加新的切面逻辑。
  • 动态性:由于织入过程发生在运行时,因此可以根据应用程序的运行时状态动态地决定是否应用某个切面逻辑。
  • 解耦:通过运行时织入,可以将与业务逻辑无关的通用横切关注点(如日志记录、性能监控、事务管理等)与业务逻辑相分离,从而实现代码复用和解耦。

6. 应用场景

运行时织入适用于需要在运行时动态地应用切面逻辑的场景,例如:

  • 日志记录:在应用程序运行时动态地记录方法调用日志,以便进行故障排查和性能分析。
  • 性能监控:在应用程序运行时动态地监控方法的执行时间、内存使用等性能指标,以便及时发现性能瓶颈并进行优化。
  • 事务管理:在应用程序运行时动态地管理事务的开启、提交和回滚等操作,以确保数据的完整性和一致性。

7. 启动VM参数

为了使LTW生效,需要在启动VM时添加参数,如-javaagent:path\spring-instrument-5.1.6.RELEASE.jar-javaagent:path\aspectjweaver-1.9.2.jar,其中path需要替换为本地路径。


http://www.kler.cn/a/382905.html

相关文章:

  • 如何在 Vue.js 中优化 Element UI 长文本显示
  • iOS用rime且导入自制输入方案
  • 单元测试怎么做
  • Docker学习—Docker的安装与使用
  • SpringBoot3集成Junit5
  • Windows、Linux系统上进行CPU和内存压力测试
  • Multi-head Attention机制简介和使用示例
  • WordPress站点网站名称、logo设置
  • python语言基础-3 异常处理-3.3 抛出异常
  • ElasticSearch 简单的查询。查询存在该字段的资源,更新,统计
  • 大厂面试真题-简单说说线程池接到新任务之后的操作流程
  • 传统媒体终端移动化发展新趋势:融合开源 AI 智能名片与 S2B2C 商城小程序的创新探索
  • 【大数据技术基础 | 实验八】HBase实验:新建HBase表
  • IDEA接入OpenAI API 方法教程
  • kotlin 协程方法总结
  • 【动手学电机驱动】STM32-FOC(3)STM32 三路互补 PWM 输出
  • 【MySQL系列】字符集设置
  • 搜维尔科技:Xsens和BoB助力生物力学教育
  • 是时候用开源降低AI落地门槛了
  • 洛科威岩棉板凭借多重优势,在工业管道保温领域大放异彩
  • 通宵修bug
  • 空间解析几何6:空间圆柱体的离散化表示【附MATLAB代码】
  • 封装axios、环境变量、api解耦、解决跨域、全局组件注入
  • 根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题
  • 修改elementUI等UI组件样式的5种方法总结,哪些情况需要使用/deep/, :deep()等方式来穿透方法大全
  • 职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨