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();
    }
    }
  • 相关阅读:
    BUPT复试专题—最长连续等差子数列(2014软院)
    BUPT复试专题—奇偶求和(2014软件)
    BUPT复试专题—网络传输(2014网研)
    Hopscotch(POJ 3050 DFS)
    Backward Digit Sums(POJ 3187)
    Smallest Difference(POJ 2718)
    Meteor Shower(POJ 3669)
    Red and Black(poj 1979 bfs)
    测试
    Equations(hdu 1496 二分查找+各种剪枝)
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/7326209.html
Copyright © 2011-2022 走看看