java动态代理的学习

java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及实现类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到实现对象上反射执行( java反射机制学习),在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能。

例子:
package com.hebaijun;
//接口
public interface Image {
	public void draw();
}

package com.hebaijun;
//具体实现
public class BigImage implements Image{
	@Override
	public void draw() {
		System.out.println("I am big image!");
	}
}

package com.hebaijun;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
// 动态处理方法的调用
public class ImageHandler implements InvocationHandler {
	Object object;
	public ImageHandler(Object obj){
		object = obj;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result;
		//可以通过函数名来对不同函数进行不同处理,而不需要每个函数都写一个代理函数。
		if (method.getName().equals("draw")) {
			System.out.println("Loading image...");
		}
		//利用反射机制执行具体的方法
		result = method.invoke(object, args);
		return result;
	}

}

package com.hebaijun;
import java.lang.reflect.Proxy;
public class Test {
	public static void main(String[] args) {
		Image image = new BigImage();
		//把具体对象传入处理类
		ImageHandler imageHandler = new ImageHandler(image);
		//传递对象信息和处理类的对象Proxy类中,newProxyInstance方法使用反射机制动态生成代理对象
		Image proxyImage = (Image)Proxy.newProxyInstance(image.getClass().getClassLoader(), image.getClass().getInterfaces(), imageHandler);
		//不管代理对象执行什么方法,都会调用imageHandler对象的invoke方法,就是说这个方法监听了所有通过代理调用的方法。
		proxyImage.draw();
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值