我在阅读 Spring 如何工作时看到了这个术语,并且我刚刚阅读了有关 JPA 实现性能的文章,它有以下统计数据:
EclipseLink 3215 毫秒 (运行时编织器 - Spring ReflectiveLoadTimeWeaver 编织器) EclipseLink(构建时编织)3571 毫秒 EclipseLink(无编织)3996 毫秒
那么,有人可以用简单的英语解释一下,什么是weaving?
谢谢!
Weaving 是通过直接修改现有的 .class(字节码)文件来生成或编辑代码。 这可能发生在应用程序生命周期的不同阶段。
Spring 框架使用它来实现 AOP 功能。 Eclipselink 使用编织进行延迟加载或更改跟踪。
Spring 文档的AOP 概念部分中描述了编织
从这里:
在 Spring AOP 中,可以模块化和分离日志记录、事务等服务,并将它们以声明方式应用到组件,因此程序员可以专注于特定的关注点。方面以 JavaBean 的方式连接到 Spring XML 文件中的对象中。这个过程被称为“编织”。
简而言之,我们可以说
编织是将建议应用到目标对象的过程 在给定的切入点处获取代理对象。
我发现这个描述很有用:
Weaving:这是将切面插入到应用程序代码中的过程 适当的点。对于编译时AOP解决方案,通常会完成这种编织 在构建时。同样,对于运行时AOP解决方案,执行编织过程 在运行时动态地[使用 JDK 动态代理和 CGLIB 代理]。 AspectJ 支持另一种称为 load- 的编织机制 时间编织(LTW),它拦截底层 JVM 类加载器并 当类加载器加载字节码时,提供对字节码的编织。
开发的面向对象的软件系统 使用面向方面的编程技术 由类和方面组成。类实现 应用程序的主要功能, 例如,管理库存或计算 保险费率。另一方面,方面则捕捉 技术问题,例如持久性、故障处理、 通信,或进程同步。
类和方面有两种方式 可以编织:静态或动态。
静态编织是指通过在以下位置插入特定于方面的语句来修改类的源代码: 加入点。在其他 单词:方面代码内联到类中。这 结果是高度优化的编织代码,其执行 速度与编写的代码相当 不使用方面。
Weaving 是一种操作已编译 Java 类的字节码的技术。
参考:http://www.eclipse.org/eclipselink/documentation/2.5/concepts/app_dev007.htm
干杯!
编织是将切面与其他应用程序类型或对象链接起来以创建建议对象的过程。编织可以在编译时、加载时或运行时完成。 Spring AOP 在运行时执行编织。