`
iluoxuan
  • 浏览: 571084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代理模式-------动态代理

 
阅读更多

对应静态代理,真实主题和代理主题共用同一个接口,代理主题必须现实对真实主题的引用,所以导致没一个真实主题必须写一个代理类,当越来越多的时候,这种就比较庞大也不好维护了!

 

JDK动态代理利用JDK来实现动态代理

 

 

首先让我们来了解一下如何使用 Java 动态代理。具体有如下四步骤:
通过实现 InvocationHandler 接口创建自己的调用处理器;
通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。

 看例子:

 

   Subject是接口, JDK动态代理只能是基于接口

   

package aop;

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

/**
 * jdk  proxy
 *
 * @author 
 * @version 1.0
 * @since 1.0
 */
public class JDKProxy implements InvocationHandler {

	private Subject target;

	public JDKProxy(Subject target) {

		this.target = target;
	}

	public Subject newInstance() {

		return (Subject) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);

	}

	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

		System.out.println("--- in jdk proxy invoke----");

		return method.invoke(target, args);
	}

	public static void main(String[] args) {

		Subject proxy = new JDKProxy(new RealySubject()).newInstance();

		proxy.handler("xxxxxxxxxxxxxxx");

	}

}

  

    解决了 静态代理中 对每个主题类都要写不同的代理的问题

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics