动态代理(Proxy)

来源:互联网 发布:执行方案范文知乎 编辑:程序博客网 时间:2024/05/17 10:38

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
原创粉丝点击