永发信息网

动态代理和静态代理的区别

答案:1  悬赏:50  手机版
解决时间 2021-11-23 08:49
动态代理和静态代理的区别
最佳答案
JAVA的静态代理与动态代理比较
1.静态代理类:
由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理类:在程序运行时,运用反射机制动态创建而成。
由此可见,代理类可以为委托类预处理消息、把消息转发给委托类和事后处理消息等。
例程1 HelloService.java
package proxy;
import java.util.Date;
public interface HelloService{
public String echo(String msg);
public Date getTime();
}
2.动态代理类
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。

Proxy类提供了创建动态代理类及其实例的静态方法。
(1)getProxyClass()静态方法负责创建动态代理类,它的完整定义如下:
public static Class getProxyClass(ClassLoader loader, Class[] interfaces) throws IllegalArgumentException
参数loader 指定动态代理类的类加载器,参数interfaces 指定动态代理类需要实现的所有接口。
(2)newProxyInstance()静态方法负责创建动态代理类的实例,它的完整定义如下:
public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler handler) throws
IllegalArgumentException
参数loader 指定动态代理类的类加载器,参数interfaces 指定动态代理类需要实现的所有接口,参数handler 指定与动态代理类关联的 InvocationHandler 对象。
以下两种方式都创建了实现Foo接口的动态代理类的实例:

//创建InvocationHandler对象
InvocationHandler handler = new MyInvocationHandler(...);
//创建动态代理类
Class proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), new Class[] { Foo.class });
//创建动态代理类的实例
Foo foo = (Foo) proxyClass.getConstructor(new Class[] { InvocationHandler.class }).
newInstance(new Object[] { handler });

//创建InvocationHandler对象
InvocationHandler handler = new MyInvocationHandler(...);
//直接创建动态代理类的实例
Foo foo = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),new Class[] { Foo.class }, handler);
由Proxy类的静态方法创建的动态代理类具有以下特点:
动态代理类是public、final和非抽象类型的;
动态代理类继承了java.lang.reflect.Proxy类;
动态代理类的名字以“$Proxy”开头;
动态代理类实现getProxyClass()和newProxyInstance()方法中参数interfaces指定的所有接口;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
简便运算2.08x3.4-7.06
天磊车灯改装·3M贴膜地址在什么地方,我
为什麽汽车轮胎会浮在水面上?
形容环境对人影响极大。求一成语
Z266次列车11号车厢有哪些座位靠窗的?
越南人钓鱼,向来都是同时操作几个鱼竿,令人
一条7个头的蛇围绕这一尊佛,这是什么佛?什
汽车遥控钥匙没电了,车子还能开吗
急!餐厅包场费
石家庄市有几个大型花草鱼虫市场
求推荐送给室友什么礼物好
绵阳东辰宜家美到底有几个店啊?
8.25-40/25x0.5怎么简算
重庆下午5点至长水机场多久
剪剪吧地址有知道的么?有点事想过去!
推荐资讯
请问北京的983路公交车多久一班?
在野外晴天、雷雨天、雪天如何辨别方向?
矩阵和向量
与s7200功能价格相似的ABBplc型号
……社会复杂,求解,前半句是什么
lol号隔天一封什么意思,封了2次,今天解封,
沈阳哪有卖活的乌鸡阿
英语考试时录音磁播放的铃声
投石器要不要装备石头 维京征服
工资2700,按五天半制上班,请假一天半,工资
关于玉华的成语
女人做着一天脚膀了怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?