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();
    }
    }
  • 相关阅读:
    面试题库
    集合的交、查、并
    mysql_server安装
    maven构建jar包
    Centos7下 升级php5.4到7.1 yum安装
    redis
    常见shell用法
    Mac下的LDAP客户端 ApacheDirectoryStudio
    redis弱密码漏洞利用
    Freeradius+Cisco2500AC+OpenLdap认证
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/7326209.html
Copyright © 2011-2022 走看看