ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态代理实现

2022-07-09 07:31:45  阅读:125  来源: 互联网

标签:invoke 实现 Object System 代理 public 动态 class out


package pattern;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicPattern {
    public static void main(String[] args) throws Throwable {
        DynamicTest dynamicTest = new DynamicTest(new TChildren());
       // T t = (T) Proxy.newProxyInstance(DynamicTest.class.getClassLoader(), new Class[]{T.class},dynamicTest);
//        t.test();//这里是获取被代理的对象
        dynamicTest.invoke(T.class,T.class.getMethod("test"),null);//这里才是通过动态代理对象去调用方法。传参、被代理的对象和对应的方法,第三个参数是方法的参数
    }
}

class DynamicTest implements InvocationHandler {

    Object target;

    public DynamicTest(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行代理前的方法");
        System.out.println("执行代理方法"+method.getName());
        System.out.println(method);
        Object invoke = method.invoke(target,args);
        System.out.println("执行代理后的方法");
        return invoke;
    }
}

interface T{
    void test();
}

class TChildren implements T{

    @Override
    public void test() {
        System.out.println("要被代理的方法执行了-----------");
    }
}

 

标签:invoke,实现,Object,System,代理,public,动态,class,out
来源: https://www.cnblogs.com/thh19201420/p/16457148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有