java动态代理的学习

来源:互联网 发布:佐治亚理工本科知乎 编辑:程序博客网 时间:2024/06/07 16:50
java动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及实现类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到实现对象上反射执行(java反射机制学习),在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能。

例子:
package com.hebaijun;//接口public interface Image {public void draw();}package com.hebaijun;//具体实现public class BigImage implements Image{@Overridepublic 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;}@Overridepublic 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();}}



原创粉丝点击