最详细的代理讲解--JDK动态代理和cglib代理 (类比spring中事物的代理)
来源:互联网 发布:iqr淘宝网首页 编辑:程序博客网 时间:2024/06/05 15:04
最详细的代理讲解--JDK动态代理和cglib代理
1.代理相关的概念
代理模式
代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
抽象主题角色
声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以是使用代理主题
代理主题(Proxy)角色
代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题控制对真实主题的引用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯地将调用传递给真实主题对象。
真实主题角色
定义了代理角色所代表地真实对象
spring有两种代理方式:
1.若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
2.若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
2.案例分析两种代理的异同
JDK动态代理
注意事项:编写JDK代理类引用的是java的工具包lang中的反射包下的Proxy,不需要引入其他jar包,但是要注意不要倒错包了;import java.lang.reflect.Proxy; 目标对象实现了若干接口。
两个接口类SayByeBye、SayGoodBye
CGLIB做代理
CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
注意事项:使用cglib做代理,java中不想jdk动态代理那样给封装好了相应的类,他需要导入所依赖的jar包asm-3.3.jar、cglib-2.2.jar这两个jar包;目标对象没有实现任何接口
目标类SayHello
package www.csdn.spring.proxy.cglib;
publicclass SayHello {
publicvoid say(String content) {
System.out.println("say:" + content);
}
}
cglib代理类CglibProxy
- 最详细的代理讲解--JDK动态代理和cglib代理 (类比spring中事物的代理)
- 最详细的代理讲解--JDK动态代理和cglib代理
- 基于Spring AOP的JDK动态代理和CGLIB代理
- 动态代理:JDK动态代理和CGLIB代理的区别
- 动态代理:JDK动态代理和CGLIB代理的区别
- 动态代理:JDK动态代理和CGLIB代理的区别
- Spring中JDK动态代理和CGLIB动态代理的性能比较
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Spring中JDK的动态代理和CGLIB代理的区别
- JDK动态动态代理和cglib动态代理的实现
- spring的jdk代理个cglib代理
- cglib动态代理和JDK InvocationHandler动态代理的比较
- jdk动态代理和cglib动态代理的区别
- cglib动态代理和jdk的动态代理
- jdk动态代理和cglib动态代理的区别
- [PHP] Easy popup in Magento
- poj3468(树状数组)
- ZOJ-1720
- CMake error: error in configuration process, project files may be invalid
- Poj 1611The Suspects
- 最详细的代理讲解--JDK动态代理和cglib代理 (类比spring中事物的代理)
- 蛇形螺旋矩阵的生成和遍历 Spiral Matrix
- 敏捷实践总结(四)——Scrum第一个Sprint实践经验积累
- win7 64位操作系统配置android开发环境
- 中移动蠢蠢欲动
- Android内存优化
- 【转】B-tree/B+tree/B*tree
- 华为面试归来
- bombing:1证书认证系统设计与实现-引言