JAVA 反射之代理Proxy

 

本文是在学习如下博文的一些总结。

http://zhangjunhd.blog.51cto.com/113473/69996

 

代理模式:

增加了一个中介,利用此中介调用实现类的逻辑,对外只公布中介,外部代码不能直接访问实现类。

 

应用场景:

当不希望将实现类完全暴露给调用方时,可以实现代理模式。调用方直接调用代理,而代理调用实现类。

 

规则:

为保证对调用者透明,代理类和实现类一般都实现同一个接口,这样,调用者就感觉直接调用了实现类。

 

JAVA Proxy

为实现代理模式,java提供了一个类Proxy

Proxy可以根据相应接口,生成相应的代理类,而后得到代理实例,此代理实例被调用后将调用InvocationHandler 。

所以InvocationHandler 需要实现具体的执行逻辑。

以下对Proxy的重要方法做一些解析。

 

1public static Class<?> getProxyClass(ClassLoader loader,

                                     Class<?>... interfaces)

                              throws IllegalArgumentException

   此方法主要实现下列逻辑

  • · 动态生产class,此class实现了interfaces数组所有的接口,且有一个构造方法,仅有一个入参为InvocationHandler类型。
  • · 使用loader加载此class
  • · 最后,返回Class对象。

2

public static Object newProxyInstance(ClassLoader loader,

                                      Class<?>[] interfaces,

                                      InvocationHandler h)

                               throws IllegalArgumentException

此方法实现逻辑如下

  • · 首先调用getProxyClass(),获得了一个Class对象 Proxyclass
  • · Constructor ProxyConstructor=Proxyclass.getConstructor(new Class[] { InvocationHandler.class });//获取Constructor
  • · Object proxy2= (Object) ProxyConstructor.newInstance(new InvocationHandler [ ] { h});     //利用Constructor
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值