首页 > 其他分享 >反射和代理

反射和代理

时间:2023-08-14 18:45:07浏览次数:28  
标签:反射 void Object 代理 IRoom new public

一.反射

我们通常都是利利⽤用new ⽅方式来创建对象实例例,这可以说就是⼀一种“正射”,这种⽅方式在编译时候就确定了了类型信息。
⽽而如果,我们想在时候动态地获取类信息、创建类实例例、调⽤用类⽅方法这时候就要⽤用到反射

二.反射原理

Java程序运行分为编译和运行两个步骤,编译后生成字节码文件,JVM操作加载字节码文件,将类型相关的信息加载进入方法区,反射是获取这些信息,进行操作。

三.实际应用

1.连接数据库驱动,使用反射完成(

class.forName(mysql),这样更换数据库时,不需要更改程序代码,程序不需要重新编译就能运行。

因为反射是动态编译的,程序运行期间生成指定类的对象,

这样就可以程序运行期间生成不同的数据库驱动程序对象。省去了固定写死一个数据库驱动对象(通过new 构造函数的方法),造成每更换一个数据库,要重新编译代码的问题

2.spring中的注解,xml配置等是由反射实例化对象

3.springAOP代理设计模式创建对象

三.使用反射实现动态代理

public class DynamicProxy implements InvocationHandler {

    private Object mobject;
    public DynamicProxy(Object o){
        this.mobject = o;

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

        Object result = method.invoke(mobject,args);
        return result;
    }
}
public interface IRoom {


    void seekRoom();//找房
    void watchRoom();//看房
    void room();//给钱租房
    void finish();//完成租房
}
public class XiaoMing implements IRoom{

    @Override
    public void seekRoom() {
        System.out.println("找房");

    }

    @Override
    public void watchRoom() {
        System.out.println("看房");

    }

    @Override
    public void room() {
        System.out.println("给钱租房");

    }
        //构造用户
        XiaoMing xiaoMing = new XiaoMing();
        //构造一个动态代理
        InvocationHandler dynamicProxy = new DynamicProxy(xiaoMing);
        //获取被代理的类的  classLoader
        ClassLoader classLoader =xiaoMing.getClass().getClassLoader();
        //new ProxyInstance 动态构造一个代理
        //传入的类加载器动态生成代理对象实例
        IRoom roomAgency = (IRoom) Proxy.newProxyInstance(classLoader,new Class[]{IRoom.class},dynamicProxy);

        roomAgency.watchRoom();
        roomAgency.seekRoom();
        roomAgency.room();
        roomAgency.finish();

 

 

引用:

https://blog.51cto.com/u_15060533/3938238

 

标签:反射,void,Object,代理,IRoom,new,public
From: https://www.cnblogs.com/developS/p/17629459.html

相关文章

  • 注解与反射
    注解与反射1.注解1.1内置注解@SuppressWarnings("all")Stringname;1.2元注解负责解释其他注解@Target:表示注解可以用在哪些地方(class,method...)@Retention:表示注解在什么地方有效。runtime>class>sources@Documented:表示是否将我们的注解生成在javado......
  • 代理模式
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语代理模式编辑<!--*@Author:yourname*......
  • ​Python爬虫IP代理池的建立和使用
    写在前面建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题。下面是建立Python爬虫IP代理池的详细步骤和代码实现:1.获取代理IP我们可以从一些代理IP网站上获取免费或付费的代理IP,或者自己租用代理IP服务。这里我们以站大爷代理为例,获取......
  • HTTP代理IP在自媒体中的作用有哪些?
    随着自媒体业务的兴起和发展,为更多人提供了一个很好的平台。在自媒体业务中,HTTP代理IP的作用主要有以下几个方面:一、爬虫和数据采集:自媒体从不同的网站抓取数据时,为了避免被网站封禁IP,可以使用HTTP代理IP进行请求,通过不断切换IP地址来绕过网站的限制,实现抓取数据的稳定性。二、流量......
  • Socks5代理:跨界电商中的智能抓取利器与全球化安全守护
    一、背景介绍跨界电商已成为企业全球化发展的关键路径。然而,全球市场的多元性使得数据抓取变得复杂且具有挑战性。同时,网络安全问题也不容忽视,尤其是在全球范围内运营时。Socks5代理作为一项强大的技术工具,能够在这些方面发挥关键作用。二、Socks5代理的基础知识Socks5代理概述:Soc......
  • Python实现透明隧道代理:不影响现有网络结构
    作为一名专业爬虫程序员,我们常常需要使用隧道代理来保护个人隐私和访问互联网资源。本文将分享如何使用Python实现透明隧道代理,以便在保护隐私的同时不影响现有网络结构。通过实际操作示例和专业的解析,我们将带您深入了解透明隧道代理的工作原理,并提供实用的操作价值。首先了解一下......
  • 在安卓模拟器上如何实现HTTP代理自动切换
    在开发和测试应用程序时,有时需要在安卓模拟器上实现HTTP代理的自动切换以方便调试。本文将介绍如何在安卓模拟器上实现HTTP代理的自动切换。1.使用脚本文件使用脚本文件是一种实现HTTP代理自动切换的简单方法。以下是一个示例脚本文件:这个脚本定义了一个代理服务器地址和端口号数组......
  • Web缓存—Squid代理服务
    一、Squid的相关知识1squid的概念  Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了......
  • 代理服务器之 squid、lvs、nginx、haproxy之间的区别
    1、正向代理正向代理服务器:squid用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端。2、反向代理:image.......
  • Nginx反向代理POST请求获取不到请求体
    好学人2023-08-14问题描述:Nginx升级HTTPS后,反向代理GET请求正常,POST请求获取不到请求体。问题原因:在升级HTTPS时,统一将所有HTTP请求都重定向到了HTTPS请求,所有再通过HTTP请求调取接口时,会被重定向到HTTPS请求,导致请求异常。解决方案:改用HTTPS请求即可。举例:http://api.example......