zoukankan      html  css  js  c++  java
  • 动态代理1

    动态代理的功能:

    1:增强一个类的方法。

    2:在不修改源类的情况下,修改类的行为或是方法。

    在Java中有一个类

    Proxy

    动态代理在运行时,会创建被代理类的接口号的子类.

    1:只这么一个要求:

    所有被代理的类,必须要拥有一个接口。

    2:动态代理有两个核心类

    1:Proxy具体类,它的静态方法newProxyInstance用于动态的创建一些接口的子类.

    2:InvocationHandler – 执行的句柄 (即在执行时可以拦到代理人的所有方法)

    有一个方法

    Invoke(Object proxy,Method mehod,Object[] args)

    Prxoy:代理人.

    Method:被执行的代理人的方法的反射对象。

    此method与tom有相同的功能。来自于同一个接口。

    Args:方法上的参数

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    public class ProxyDemo {
        public static void main(String[] args) {
            //1:声明Tom实例,被代理对象
            final Tom tom = new Tom();
            //2:声明tom的代理对象
            Object obj =
                    Proxy.newProxyInstance(
                            ProxyDemo.class.getClassLoader(),//用哪一个类加载器在内存中创建IPerson的子类
                            new Class[]{IPerson.class},//指定创建哪一些接口的子类
                            new InvocationHandler() {
                                public Object invoke(Object proxy, Method method, Object[] args)
                                        throws Throwable {
                                    System.err.println("准备好");
                                    //动态的执行tom这个类的run方法
                                    method.invoke(tom,args);
                                    System.err.println("第一名");
                                    return null;
                                }
                            });
            //3:目前obj就是IPerson的子类
            System.err.println(obj.getClass());
            IPerson tomProxy = (IPerson) obj;
            tomProxy.run();
        }
    }
    
    
    //开发一个接口
    interface IPerson{
        public void run();
        public void say();
    }
    //开发一个具体类
    class Tom implements IPerson{
        public void run() {
            System.err.println("正在跑步...ing....");
        }
        public void say() {
            System.err.println("你好我们是朋友");
        }
    }
    
    class com.sun.proxy.$Proxy0
    准备好
    跑步中
    第一名

  • 相关阅读:
    java微信小程序调用支付接口
    Java开发中的23种设计模式详解(转)
    SSM框架-SpringMVC 实例文件上传下载
    设计模式--观察者模式
    设计模式之策略模式
    网络通讯简单了解
    android 五子棋开发
    android studio里的build.gradle基本属性
    android studio 真机调试
    java线程知识点
  • 原文地址:https://www.cnblogs.com/xiaweifeng/p/3697479.html
Copyright © 2011-2022 走看看