JDK动态代理原理

本文探讨了JDK动态代理的原理,分析了其生成代理类的过程,并详细介绍了如何手动实现这一过程,包括建立接口与实现类、创建InvocationHandler、自定义ClassLoader以及测试代理对象的创建。最终成功在控制台上验证了动态代理功能的实现。
摘要由CSDN通过智能技术生成

学习完JDK的动态代理、静态代理、cglib代理后,其实现原理就是通过在JVM中通过字节码重组从而创建了一个代理对象。

那我试着手动去自己实现这一过程。

1.分析JDK动态代理

通过JDK动态代理可以生成一个代理类,输出这个代理类我们可以看到这是一个从来没有定义的类

User userproxy=(User)new UserProxy().getInstance(new UserImpl());
System.out.println(userproxy.getClass());

这个类我们是无法找到的 因为JDK生成完成代理类后删除了该类

 1.1 通过分析我们可以知道动态代理有以下这几个过程:

1、拿到被代理对象的引用,并且获取到它的所有的接口,反射获取
2JDK Proxy类重新生成一个新的类、同时新的类要实现被代理类所有实现的所有的接口
3、动态生成Java代码,把新加的业务逻辑方法由一定的逻辑代码去调用(在代码中体现)
4、编译新生成的Java代码.class
5、再重新加载到JVM中运行

2.实现过程

    2.1 建立一个接口类 User 和实现类 UserImpl

    

public interface User {

   public void add();

   public void update();
}
 
public class UserImpl implements User {
    @Override
    public void add() {
        System.out.println("新增用户");
    }

    @Override
    public void update() {
        System.out.println("修改用户");
    }
}

 2.2  建立自己的InvocationHandler 

public interface GPInvocationHandler {
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}

2.3 因为在生成代理类中需要把class文件加载到JVM中去,所以我们需要去实现自己的ClassLoader

public class GPClassLoader extends  ClassLoader {

    private File classPathFile;

    public GPClassLoader(){
        String classPath = GPClassLoader.class.getResource("").getPath();
        //<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值