西宁的网站设计,php网站开发外文,如何在家做电商,南昌门户网站开发Spring AOP
Spring AOP 属于运行时增强#xff0c;主要具有如下特点#xff1a;
基于动态代理来实现#xff0c;默认如果使用接口的#xff0c;用 JDK 提供的动态代理实现#xff0c;如果是方法则使用 CGLIB 实现Spring AOP 需要依赖 IOC 容器来管理#xff0c;并且只能…Spring AOP
Spring AOP 属于运行时增强主要具有如下特点
基于动态代理来实现默认如果使用接口的用 JDK 提供的动态代理实现如果是方法则使用 CGLIB 实现Spring AOP 需要依赖 IOC 容器来管理并且只能作用于 Spring 容器使用纯 Java 代码实现在性能上由于 Spring AOP 是基于动态代理来实现的在容器启动时需要生成代理实例在方法调用上也会增加栈的深度使得 Spring AOP 的性能不如 AspectJ 的那么好。Spring AOP 致力于解决企业级开发中最普遍的 AOP(方法织入)。
AspectJ
AspectJ 是一个易用的功能强大的 AOP 框架属于编译时增强 可以单独使用也可以整合到其它框架中是 AOP 编程的完全解决方案。AspectJ 需要用到单独的编译器 ajc。
AspectJ 属于静态织入通过修改代码来实现在实际运行之前就完成了织入所以说它生成的类是没有额外运行时开销的一般有如下几个织入的时机
编译期织入Compile-time weaving如类 A 使用 AspectJ 添加了一个属性类 B 引用了它这个场景就需要编译期的时候就进行织入否则没法编译类 B。编译后织入Post-compile weaving也就是已经生成了 .class 文件或已经打成 jar 包了这种情况我们需要增强处理的话就要用到编译后织入。类加载后织入Load-time weaving指的是在加载类的时候进行织入要实现这个时期的织入有几种常见的方法
整体对比如下