Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
来源:互联网 发布:对网络用语的看法 编辑:程序博客网 时间:2024/05/31 19:56
Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
1.1.AOP代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ为代表;而动态代理则以 spring AOP为代表 1
1.2.JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式1
1.3.CGLIB代理模式的缺点 在static和final方法上应用横切关注点也是无法做到的。2
1.1. AOP代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ为代表;而动态代理则以 spring AOP为代表
CGLIB动态代理 是可以针对接口与普通类(继承方式),底层使用ASM框架生成字节码完成代理功能
我在网上查资料说AspectJ是静态代理 在编译期间就生成了class文件完成了代理。这点容易理解一种编译的技术
因为spring支持AspectJ风格的AOP
还是动态的,标注中用到的JoinPoint等类都来自aspectj包
1.2. JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式
JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式,一般采用前者,因为前者效率高。后者不建议使用,除非非用不可
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB等在内存中“临时”生成AOP 动态代理类,因此也被称为运行时增强。
区别只是生成 AOP代理类的时机不同:AspectJ采用编译时生成 AOP代理类,因此具有更好的性能,但需要使用特定的编译器进行处理;而 Spring AOP则采用运行时生成 AOP代理类,因此无需使用特定编译器进行处理。由于 Spring AOP需要在每次运行时生成 AOP代理,因此性能略差一些。
1.3. CGLIB代理模式的缺点 在static和final方法上应用横切关注点也是无法做到的。
因为Spring基于代理模式(使用CGLIB),它有一个使用限制,即无法在使用final修饰的bean上应用横切关注点。因为代理需要对Java类进行继承,一旦使用了关键字final,这将是无法做到的。
例如,在Spring bean MyServicesImpl上使用关键字final,并配置一个“execution(public * *(..))”这样的切入点,将导致运行时异常(exception),因为Spring不能为MyServicesImpl生成代理。
这种情况下,你也许会考虑使用AspectJ,其支持编译期织入且不需要生成代理。
于此相似,在static和final方法上应用横切关注点也是无法做到的。因为Spring基于代理模式。如果你在这些方法上配置通知,将导致运行时异常,因为static和final方法是不能被覆盖的。在这种情况下,你也会考虑使用AspectJ,因为其支持编译期织入且不需要生成代理。
AOP日志,记录调用类、方法、方法参数名称、方法参数值(包括对象和基本类型)- paincupid的专栏- 博客频道- CSDN.NET.html
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
简称 Attilax Akbar 阿提拉克斯 阿克巴
全名:Attilax binMahmud bin attila binSolomon Akbar Al Rapanui
阿提拉克斯 本马哈茂德 本 阿提拉本 所罗门 阿克巴 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
转载请注明来源:attilax的专栏 http://blog.csdn.net/attilax
--Atiend
- Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java代理之(jdk静态代理/jdk动态代理/cglib动态代理/aop/aspectj)
- 【Spring AOP】【AspectJ】【CGLIB】【JDK动态代理】【JDK静态代理】区别
- 静态代理;动态代理;CGLIB
- AspectJ cglib jdk动态代理
- 静态代理,动态代理,Cglib代理
- 静态、动态、cglib代理
- spring 代理(静态代理&动态代理&cglib代理)
- Java代理模式 静态代理,动态代理,Cglib代理
- 代理模式——静态代理、动态代理、cglib代理
- 代理全家桶:静态代理,动态代理,cglib 代理
- java静态代理,动态代理,CGLIB
- Centos 7 安装 Java 开发环境
- haproxy配置详解
- HDU3518-Boring counting
- hdu 2639 Bone Collector II (背包的第K优解)
- 编译原理作业1,2
- Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
- uCOS-II任务管理之改变任务的优先级
- 安卓StatFs使用
- [转载]Graph cut入门学习
- Android学习之Fragment
- jvm下的栈、堆、方法区和常量池的存储机制
- 汇编各种中断
- 静态库、动态库,dll文件、lib文件,隐式链接、显式链接浅见
- 【随记 css+js 开发】带进度条和数字的动画加载页开发