JDK动态代理----基于接口实现

本文介绍了JDK动态代理的实现机制,重点关注了Proxy类和InvocationHandler接口的角色。通过Proxy.newInstance()方法,结合InvocationHandler,可以在运行时生成代理类,从而在调用目标方法前后插入额外的逻辑。动态代理的主要作用是进行方法调用的拦截,便于添加监控或扩展功能。
摘要由CSDN通过智能技术生成

JDK动态代理----基于接口实现

动态代理依赖的类

动态代理是jdk的技术,在java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。

InvocationHandler 用于表示在执行某个方法之前、之后你想加入什么代码,这个是真正在干活的类

用于自动生成代理类,InvocationHandler的子类将会作为Proxy的一个参数来生成代理类。

两者如何关联上的?

通过Proxy.newInstance()方法,invocationHandler会作为参数传入Proxy, 由Proxy在编译的时候加工自动生成代理类,这个生成的代理类里就会有invocationHandler里指定的要执行的代码

代理类的作用?

代理类的工作就是把实体类接过来,然后调用它的方法,也就是说本来实体类可以自己执行的方法现在由代理类来触发执行,这样做的好处是,在调用实体类方法的前后我们可以插入监控方法

public class ProxyDemo {
   
    public static void main(String[] args) {
   
        //创建一个实例对象,这个对象就是被代理的对象
        IDog dog = new GunDog();
        /**
         * 创建一个与代理对象相关联的invocationHandler对象的子类
         * 并通过它来创建一个代理对象,代理对象被调用后,每个执行方法都会替换执行Invocation中的invoke		 * 方法
         * 可以通过反编译生成的代理类来验证
         */
        IDog proxy = (IDog)MyProxyFactory.getProxy(dog);
        //调用代理类的执行方法
        proxy.run();

        //生成代理类的字节码,并将其写入本地磁盘的class文件中
        byte[] classFile = ProxyGenerator.generateProxyClass("$Proxy0", GunDog.class.getInterfaces());
        String path = "C:\\Users\\liss\\IdeaProjects\\Java-Proxy\\src\\com\\shuai\\DogProxy.class";
        try(FileOutputStream fos = new FileOutputStream(path)) {
   
            fos.write(classFile);
            fos.flush();
            System
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值