博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 动态代理
阅读量:5276 次
发布时间:2019-06-14

本文共 1469 字,大约阅读时间需要 4 分钟。

动态代理其实也是代理的一种,所谓动态在于我们的代理类可以适用于所有类型的被代理对象,这一点其实跟PHP的__call()方法是一样的。

public interface Flyable {    void fly();}public class Eagle implements Flyable {    @Override    public void fly() {        System.out.println("I am eagle, I can fly in 100 km/h");    }}import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class DynamicProxy implements InvocationHandler {    private Object proxied = null;    public DynamicProxy(Object proxied) {        this.proxied = proxied;    }        @Override    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {        System.out.println("Using dynamic proxy " + proxy.getClass() +                " method : " + method + " args : " + args);        return method.invoke(proxied, args);    }}import java.lang.reflect.Proxy;public class Test {    public static void main(String[] args) {        Eagle eagle = new Eagle();        Flyable flyProxy = (Flyable) Proxy.newProxyInstance(                    Flyable.class.getClassLoader(),                    new Class[] { Flyable.class },                    new DynamicProxy(eagle)                );        flyProxy.fly();    }}

Java的动态代理理解起来有点绕,他需要一个InvocationHandler对象,这个东西就是我们的代理对象,里面放了一个Object proxied,这个就是被代理对象,invoke()方法其实就是在用反射在调用proxied的方法。客户端使用Proxy.newProxyInstance()方法创建代理类,需要传入的参数有ClassLoader,代理类需要实现的接口的Class,以及代理类,当然还有代理类的里面的proxied实例。关于代理的好处参见这里 

转载于:https://www.cnblogs.com/zemliu/archive/2012/11/11/2765518.html

你可能感兴趣的文章
Java面向对象(二、继承)
查看>>
关于http协议
查看>>
jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
查看>>
软件工程个人项目——买书的最低价格
查看>>
5-21
查看>>
springboot 集成 swagger 自动生成API文档
查看>>
SAN,NAS区别的联系
查看>>
Java并发编程之ConcurrentHashMap
查看>>
Django--form验证及错误处理
查看>>
字符数组、字节数组、字符串转换
查看>>
苹果浏览器移动端click事件延迟300ms的原因以及解决办法
查看>>
与冯大辉谈数据库架构
查看>>
Capture
查看>>
day21.模块和包
查看>>
NET面试题:C#中的lock关键字有何作用
查看>>
使用.NET中的XML注释(一) -- XML注释标签讲解
查看>>
我就是我,不一样的browser
查看>>
结对编程 四则运算 第一周小结
查看>>
JAVA_HOME和CLASSPATH设置
查看>>
Andrew Ng机器学习课程14(补)
查看>>