首页 > 其他分享 >JDK动态代理

JDK动态代理

时间:2023-12-20 18:04:06浏览次数:26  
标签:implClass String JDK 代理 class result 动态 public MyInvocationHandler

接口类:

public interface HelloService {
    String sayHello(String name);
}

实现类:

public class HelloServiceImpl implements HelloService{
    @Override
    public String sayHello(String name) {
        return "你好," + name;
    }
}

代理工具类:

import java.lang.reflect.Proxy;

/**
 * 动态代理工厂类,通过JDK动态代理创建代理对象
 */
public class ProxyFactory {
    public static <T> T getProxy(Class<?> implClass) {
        MyInvocationHandler invocationHandler = new MyInvocationHandler(implClass);
        return (T) Proxy.newProxyInstance(implClass.getClassLoader(), implClass.getInterfaces(), invocationHandler);
    }
}

处理器:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;

public class MyInvocationHandler implements InvocationHandler {

    private Class<?> implClass;

    public MyInvocationHandler(Class<?> implClass) {
        this.implClass = implClass;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        Object result = method.invoke(implClass.newInstance(), args);
        return result;
    }
}

客户端:

public class Consumer {

    public static void main(String[] args) {
        System.out.println(" ===========[Consumer started!!]=============");

        HelloService helloService = ProxyFactory.getProxy(HelloServiceImpl.class);

        String result = helloService.sayHello("World");
        System.out.println("Consumer.result:" + result);
    }
}

标签:implClass,String,JDK,代理,class,result,动态,public,MyInvocationHandler
From: https://blog.51cto.com/u_11315052/8909638

相关文章

  • vue项目多axios实例动态创建
    //通用请求拦截器importaxiosfrom"axios";importQsfrom"qs";importstorefrom"@/store";importrouterfrom"@/router";import{Loading,Message}from"element-ui";//引用element-ui的加载和消息提示组件letloading......
  • 设计模式—代理模式
    介绍代码接口创建接口ImagepublicinterfaceImage{voiddisplay();}实体类创建实体类RealImagepublicclassRealImageimplementsImage{privateStringfileName;publicRealImage(StringfileName){this.fileName=fileName;......
  • 深度解析ArrayList:灵活高效的动态数组实现
    在Java集合框架中,ArrayList是一个常用而强大的类,它提供了动态数组的实现,允许在运行时动态调整数组的大小。ArrayList是List接口的实现类,基于动态数组的数据结构。它可以存储任意类型的对象,并提供了丰富的方法,包括添加、删除、遍历等,使其在各种场景下都能发挥重要作用。底层......
  • C++ Qt开发:QItemDelegate 自定义代理组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QStyledItemDelegate自定义代理组件的常用方法及灵活运用。在Qt中,QStyledItemDelegate类是用于......
  • Python中强大的动态类型特性,以方法调用为例
    在研究大佬的项目时,从一行行代码溯源,拨茧抽丝的过程中,发现了方法调用的“神奇之处”具体情况如下:1.在类Trainer中名为run等方法中有加载预训练好的模型的load方法2.load()方法依旧是类方法中的一个,在load方法中有具体的load_self()方法3. load_self()定义在另一个py文件mod......
  • 动态短效代理ip为什么限制ip提取和并发?
    动态短效代理IP之所以会限制提取和并发连接的原因主要是为了防止滥用、维护服务的质量和可靠性。下面是一些可能的原因:      1,防止滥用: 提供短效HTTP代理IP的服务可能会实施提取和并发限制,以防止滥用其资源。如果没有限制,用户可能会大规模地抓取代理IP,导致服务不稳定,甚至......
  • 代理模式理解
    代理模式其实称为网关模式就很好理解,即代理就是那个网关,它只是会额外的做一些操作(比如日志记录,拦截等),然后原封不动的将参赛调用被代理对象,然后再将被代理对象(各方法)执行后拿到的结果返回给调用放;即中间多了一个代理层(网关);网关需要配置被代理服务的地址,同样的代理对象需要配置被......
  • JDK动态代理如何实现
    通过字节重组,重新生成对象来代替原始对象,以达到代理的目的。字节码重组的基本步骤如下:1.获取被代理对象的引用,利用反射获取到它的所有接口。2.JDK动态代理类Proxy重新生成一个新的类,此类要实现刚才获取到的所有接口。3.动态生成新类的Java代码。4.编译.java文件成.class文件。5.加......
  • nginx反向代理jumpserver
    背景之前的文章介绍了,如何使用docker部署jumpserver当需要配置成https的时候,会发现很不好调整那么就出现了一种新的场景,那就是,后端服务不能动,如何在原来的基础上实现https的方式访问思路通过nginx反向代理给后端实现jumpserver的web服务地址是10.0.0.12:8888生成证书这......
  • 如何建立自己的代理IP池,减少爬虫被封的几率
    前言建立自己的代理IP池可以帮助减少爬虫被封的几率。通过使用代理IP,我们可以隐藏爬虫的真实IP地址,提高爬取网站的稳定性和安全性。本文将介绍如何建立一个代理IP池,并提供相关代码示例。一、了解代理IP的工作原理在开始建立代理IP池之前,我们需要了解代理IP的工作原理。代理IP是一个......