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

代理模式-动态代理实现动态代理模式

2天前CN2资讯

基本介绍

(1)代理模式为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能

(2)被代理的对象可以是远程对象,创建开销大的对象或需要安全控制的对象

(3)代理模式有不同的形式,主要有三种 静态代理,动态代理(JDK代理,接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,他是属于动态代理的范畴)

静态代理

基本介绍:静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类

优缺点:

(1)在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展

(2)因为代理对象需要与目标实现一样的接口,所以会有很多代理类

(3)一旦接口增加方法,目标对象与代理对象都要维护

动态代理

(1)代理接口,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理

(2)代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象

(3)动态代理也叫做:JDK代理,接口代理

Cglib代理模式

(1)静态代理和JDK代理模式都要求目标对象是实现一个接口,但是有时候对象只是一个单独的对象,并没有实现任何接口,这个时候可使用目标对象子类来实现代理-这就是Cglib代理

(2)Cglib代理也叫子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展,有些书也将Cglib代理归属到动态代理

(3)Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类与实现java接口,它广泛的被许多AOP框架使用例如spring AOP,实现方法拦截

(4)在AOP编程中如何选择代理模式:

  1.目标对象需要实现接口,用JDK代理

  2.目标对象不需要实现接口,用cglib代理

(5)Cglib包的底层是通过使用字节码处理框架ASM来转换字节码并生成新的

import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyMode { public static void main(String[] args) { IPerson person = new Person(); IPerson proxyFactory =(IPerson) new ProxyFactory(person).getProxyInstance(); proxyFactory.eat(); } } interface IPerson{ void eat(); } class Person implements IPerson{ public void eat() { System.out.println("小明开始吃饭"); } } class ProxyFactory{ private Object object; public ProxyFactory(Object object) { this.object = object; } //给目标对象 生成一个代理对象 public Object getProxyInstance() { //说明 // public static Object newProxyInstance(ClassLoader loader, // Class<?>[] interfaces, // InvocationHandler h) //1. ClassLoader loader : 指定当前目标对象使用的类加载器, 获取加载器的方法固定 //2. Class<?>[] interfaces: 目标对象实现的接口类型,使用泛型方法确认类型 //3. InvocationHandler h : 事情处理,执行目标对象的方法时,会触发事情处理器方法, 会把当前执行的目标对象方法作为参数传入 return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("动态代理开始准备餐具~~"); System.out.println("动态代理开始上菜~~"); //反射机制调用目标对象的方法 Object returnVal = method.invoke(object, args); System.out.println("用餐结束,动态代理结束"); return returnVal; } }); } }
    你可能想看:

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

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

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

    分享给朋友:

    “代理模式-动态代理实现动态代理模式” 的相关文章

    通过公钥生成私钥:全面解析加密技术及其应用

    公钥和私钥的基本概念 公钥和私钥是密码学中的一对密钥,它们共同构成了非对称加密系统的基础。公钥是公开的,可以自由分享给任何人,而私钥则是保密的,只有密钥的持有者才能访问。这对密钥的特殊之处在于,它们之间存在着一种数学关系,使得用公钥加密的信息只能用对应的私钥解密,反之亦然。这种机制确保了信息在传输过...

    JustHost优惠码大揭秘:节省开支的绝佳办法

    JustHost概述 我对JustHost的了解始于它的多样化主机产品和用户友好的服务。JustHost成立于2006年,作为一家俄罗斯主机商,它提供虚拟主机、VPS服务器以及独立服务器,是一个值得关注的选择。JustHost不仅拥有丰富的技术背景,还致力于为用户提供高性价比的服务,这让我对它充满了...

    UCloud年付100元的云服务选择与优势解析

    在开始探讨UCloud的计费方式之前,我想先分享一下我对云服务费用的一些理解和看法。在如今的数字化时代,选择合适的云服务提供商至关重要,计费方式也应兼顾灵活性和经济性。我在UCloud上体验过不同的计费方式,从中得出了一些实用的建议。 UCloud提供的计费方式相当多样,特别是在按年计费这一块。对于...

    探索诸暨市:地理特征、气候与经济发展全面分析

    我发现诸暨市,这个位于浙江省中北部的县级市,真是一个令人着迷的地方。它东靠嵊州市,南面与东阳、义乌和浦江相邻,西面与桐庐和富阳相接,北边则与柯桥和萧山为界。这样的地理位置赋予了诸暨市独特的区域特色,方便了与周边城市的交流与发展。 在谈到诸暨的地理特征时,不得不提其独特的地形地貌。诸暨市位于浙东南和浙...

    RackNerd评测:高性价比VPS服务体验与优缺点分析

    谈到VPS主机服务,RackNerd无疑是近年来备受关注的一个名字。成立于2019年的RackNerd,以其高性价比和出色的客户服务,迅速在行业内站稳了脚跟。无论你是个人网站的博主,还是小型企业的运营者,RackNerd都能为你提供一个合适的解决方案。 RackNerd的主要数据中心遍布北美和欧洲,...

    Vultr Cloud Computer与High Frequency服务器的全面对比

    在云服务的世界中,Vultr无疑是一个备受瞩目的名字。它提供两种主要的云服务器类型:Vultr Cloud Compute和High Frequency服务器。这两种服务器各有其独特之处,适合不同类型的用户和使用场景。 首先,Vultr Cloud Compute是其最基础的产品,主要以高性价比为卖...