动态代理(Proxy)

Java Proxy 是基于接口实现动态代理,虽然具有一定局限性,但是不得不说Proxy仍然是非常伟大、优秀的.代理模式的应用相当广泛,开源架构Spring AOP 就是基于Java Prxoy 实现的. OK! 废话不多说了.接下来我们以几个实例来看一下Proxy到底如何应用,也会看一下SUN如何实现的Proxy.

Java  API:

构造方法摘要
protectedProxy(InvocationHandler h)
          使用其调用处理程序的指定值从子类(通常为动态代理类)构建新的 Proxy 实例。

 

方法摘要
static InvocationHandlergetInvocationHandler(Object proxy)
          返回指定代理实例的调用处理程序。
static Class<?>getProxyClass(ClassLoader loader,Class<?>... interfaces)
          返回代理类的 java.lang.Class 对象,并向其提供类加载器和接口数组。
static booleanisProxyClass(Class<?> cl)
          当且仅当指定的类通过 getProxyClass 方法或 newProxyInstance 方法动态生成为代理类时,返回 true。
static ObjectnewProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
          返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。


package com.haian.test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author Lixh
 *
 */
public class SecurityHandler implements InvocationHandler {

 // 需要代理的目标对象
 public Object targeObject = null;

 // 生成代理类
 public Object createProxyInstance(Object targeObject) {

  this.targeObject = targeObject;
  return Proxy.newProxyInstance(SecurityHandler.class.getClassLoader(),
    targeObject.getClass().getInterfaces(), this);
 }

 public Object invoke(Object arg0, Method method, Object[] arrays)
   throws Throwable {

  return method.invoke(targeObject, arrays);
 }

 public void validate() {

 }
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值