当前位置:首页 > CN2资讯 > 正文内容

spring(六)代理模式spring代理模式

9小时前CN2资讯
6、代理模式

6.1 静态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决

  • 真实角色:被代理的角色

  • 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作

  • 客户:访问代理对象的人

代码步骤:

  • 接口

  • 真实角色

  • 代理角色

  • 客户端访问代理角色

代理模式的好处:

  • 可以使真实角色的操作更加存粹!不用去关注一些公共的业务

  • 公共交给了代理角色,实现了业务的分工

  • 公共业务发生扩展的时候,方便集中管理

j静态代理缺点:

一个真实角色就会产生一个代理角色,代码量会翻倍 开发效率变低

6.2 动态代理

具体参考该条博客理解

  • 动态代理和静态代理角色一样
  • 动态代理的代理类是动态生成的,不是我们直接写好的
  • 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
    基于接口:JDK动态代理
    基于类: cglib
    java字节码实现: javasist

需要了解两个类:Proxy:代理 InvocationHandler:调用处理程序

Proxy

java.lang.reflect.Proxy
Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。(大白话:这是一个静态类,类里边有方法得到代理类)

动态代理类 (以下简称为代理类 )是一个实现在类创建时在运行时指定的接口列表的类,具有如下所述的行为。 代理接口是由代理类实现的接口。 代理实例是代理类的一个实例。 每个代理实例都有一个关联的调用处理程序对象,它实现了接口InvocationHandler 。 通过其代理接口之一的代理实例上的方法调用将被分派到实例调用处理程序的invoke方法,传递代理实例, java.lang.reflect.Method被调用方法的java.lang.reflect.Method对象以及包含参数的类型Object Object的数组。 调用处理程序适当地处理编码方法调用,并且返回的结果将作为方法在代理实例上调用的结果返回。

代理类具有以下属性:

  • 代理类是公共的,最终的,而不是抽象的,如果所有代理接口都是公共的。

  • 如果任何代理接口是非公开的,代理类是非公开的,最终的,而不是抽象的 。

  • 代理类的不合格名称未指定。 然而,以字符串"$Proxy"开头的类名空间应该保留给代理类。

  • 一个代理类扩展了java.lang.reflect.Proxy 。

  • 代理类完全按照相同的顺序实现其创建时指定的接口。

  • 如果一个代理类实现一个非公共接口,那么它将被定义在与该接口相同的包中。 否则,代理类的包也是未指定的。 请注意,程序包密封不会阻止在运行时在特定程序包中成功定义代理类,并且类也不会由同一类加载器定义,并且与特定签名者具有相同的包。

  • 由于代理类实现了在其创建时指定的所有接口, getInterfaces在其类对象上调用getInterfaces将返回一个包含相同列表接口的数组(按其创建时指定的顺序),在其类对象上调用getMethods将返回一个数组的方法对象,其中包括这些接口中的所有方法,并调用getMethod将在代理接口中找到可以预期的方法。
    Proxy.isProxyClass方法将返回true,如果它通过代理类 - 由Proxy.getProxyClass返回的类或由Proxy.newProxyInstance返回的对象的类 - 否则为false。

  • 所述java.security.ProtectionDomain代理类的是相同由引导类装载程序装载系统类,如java.lang.Object ,因为是由受信任的系统代码生成代理类的代码。 此保护域通常将被授予java.security.AllPermission 。

  • 每个代理类有一个公共构造一个参数,该接口的实现InvocationHandler ,设置调用处理程序的代理实例。 而不必使用反射API来访问公共构造函数,也可以通过调用Proxy.newProxyInstance方法来创建代理实例,该方法将调用Proxy.getProxyClass的操作与调用处理程序一起调用构造函数

InvocationHandler

InvocationHandler是由代理实例的调用处理程序实现的接口 。
每个代理实例都有一个关联的调用处理程序。 当在代理实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法。
invoke(Object proxy, 方法 method, Object[] args) 处理代理实例上的方法调用并返回结果。

创建代理类工具包:

// 动态代理类 public class StuInvocationHandler<T> implements InvocationHandler { // 该代理类持有的对象 T target; public StuInvocationHandler(T target) { this.target = target; } public Object getProxy(){ return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this); } /** * proxy:代表动态代理对象 * method:代表正在执行的方法 * args:代表调用目标方法时传入的实参 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理执行" +method.getName() + "方法"); //代理过程中插入监测方法,计算该方法耗时 MonitorUtil.start(); Object result = method.invoke(target, args); MonitorUtil.finish(method.getName()); return result; } }

时间计时功能工具类

public class MonitorUtil { // 计算时间的工具类 private static ThreadLocal<Long> t1 = new ThreadLocal<>(); public static void start(){ t1.set(System.currentTimeMillis()); } // 结束时打印耗时 public static void finish(String methodName){ long finishTime = System.currentTimeMillis(); System.out.println(methodName+"方法耗时"+(finishTime-t1.get())+"ms"); } }
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24920.html

    分享给朋友:

    “spring(六)代理模式spring代理模式” 的相关文章

    韩国服务器:提升企业在线表现的理想选择

    在当今数字化时代,韩国服务器以其独特的优势吸引了大量企业和开发者的关注。位于东亚的韩国,因其良好的地理位置,能够为用户提供低延迟和高速度的服务。无论是在线游戏、电子商务,还是移动应用,韩国服务器都能确保快速的响应和稳定的运行。 韩国服务器的特点令其在市场上独树一帜。首先,许多服务商提供高性能、稳定的...

    Wikihost:构建高效知识库的理想WordPress主题

    Wikihost是一个专为WordPress平台设计的知识库主题,目的在于帮助用户轻松创建和管理知识库文章与文档页面。这款主题适合各种类型的网站,从小型企业到大型社区,用户都能通过它建立富有信息性的页面。Wikihost给用户提供了一整套便捷的功能,帮助他们分享知识和信息。 我发现Wikihost的...

    狗云实名认证的重要性与服务体验

    狗云简介 提起狗云(Dogyun),首先让我想起的是它在国内主机服务商中崭露头角的那段经历。成立于2019年,这家由国人创办的云服务平台,积极响应了市场对高质量、低价格VPS服务的需求。服务范围覆盖美国、日本和中国香港等地,让不少技术爱好者和企业客户看到了更多选择的可能。由于其价格相对亲民,狗云逐渐...

    OVH云服务概述:高性价比的VPS与专用服务器解决方案

    OVH概述 谈到云服务提供商,OVH无疑是一个引人注意的名字。这家成立于1999年的法国公司,总部位于鲁贝,已经从当初的小公司发展成为全球领先的云服务平台。OVH不仅为个人和企业提供各种云计算解决方案,还持续推动技术创新,满足越来越多用户的需求。 OVH拥有广泛的服务网络,分布在北美、欧洲、亚洲和非...

    如何在PVE中使用OVA文件进行高效虚拟机管理

    在探讨PVE和OVA之前,我想分享一下我的个人体验。近年来,随着云计算和虚拟化技术的飞速发展,我们越来越频繁地接触到这些概念。PVE,即Proxmox Virtual Environment,成为了许多企业青睐的虚拟化解决方案。而OVA,则丰富了我们对动画内容的理解。接下来,我将分别介绍这两个重要的...

    黑五VPS促销: 省钱又省心的选择指南

    在这个数字化的时代,VPS(虚拟专用服务器)成为越来越多业务和个人的选择。VPS其实是一种独立的虚拟服务器,它通过物理服务器上的虚拟化技术进行资源分隔。因此,不同用户可以在同一台物理服务器上,拥有独立的操作空间。想象一下,你可以像使用传统的独立服务器一样,享受更高的性能和安全性,同时又不需要承担独立...