zoukankan      html  css  js  c++  java
  • java动态代理的实现

    1.首先定义一个委托类的接口Subject,应该必须是接口,而不能是抽象类。因为Proxy.newProxyInstance方法的第二个参数需要委托类实现的接口。
    public static Object newProxyInstance(ClassLoader loader,
    Class<?>[] interfaces,
    InvocationHandler h)
    第一个参数是代理类的类加载器
    第三个参数是指明产生的代理类所做的事情,代理对象调用的任何方法都会调用 InvocationHandler 的 invoke() 方法的
    2.具体委托类Connection实现Subject接口
    3.代理类ConnectionProxy
    package com.huyanxia.designModel;
    import java.lang.reflect.*;
    import java.lang.reflect.Proxy;

    /**
    * Created by huyanxia on 2017/8/8.
    */
    interface Subject{
    void query();
    }
    class Connection implements Subject{
    public void query(){
    System.out.println("查询");
    }
    }
    class ConnectionProxy{
    public Subject getProxy(){
    //持有具体委托类的一个对象
    Connection c = new Connection();
    //返回代理对象
    return (Subject) Proxy.newProxyInstance(ConnectionProxy.class.getClassLoader(), c.getClass().getInterfaces(), new InvocationHandler(){
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    if(method.getName()=="query"){
    return method.invoke(c,args);
    }
    return null;
    }
    });
    }
    }
    public class ProxyHandler {
    public static void main(String[] args) {
    ConnectionProxy cp = new ConnectionProxy();
    cp.getProxy().query();
    }
    }
  • 相关阅读:
    跟我一起学算法——贪心算法
    跟我一起学算法——最大流
    跟我一起学算法——红黑树
    设计模式总结
    敏捷开发模型
    TCP安全,SYN Flooding 和 nmap
    ICMP和重定向攻击
    IP安全,DDoS攻击、tearDrop攻击和微小IP碎片攻击
    Netfilter,获取http明文用户名和密码
    Linux常用网络命令
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/7326209.html
Copyright © 2011-2022 走看看