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

JDK代理 与 CBLIB代理 总结

2天前CN2资讯

   JDK代理:

package com.pinus.factory;  import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map;  public class BeanFactory implements InvocationHandler {     private static Map<Object, Object> map;      private BeanFactory() {     }      /**      * 创建BeanFactory实例      */     public static BeanFactory getInstance() {         map = new HashMap<Object, Object>();         return new BeanFactory();     }      /**      * 得到原类型对象      */     @SuppressWarnings("rawtypes")     public Object getBean(Class classType) {         try {             return classType.newInstance();         } catch (Exception e) {             e.printStackTrace();             throw new RuntimeException(e);         }     }      /**      * 得到代理类型对象      */     @SuppressWarnings("rawtypes")     public Object getProxyBean(Class classType) {         Object proxyObject = Proxy.newProxyInstance(classType.getClassLoader(),                 classType.getInterfaces(), this);         Object targetObject = this.getBean(classType);         map.put(proxyObject.getClass(), targetObject);         return proxyObject;     }      @Override     public Object invoke(Object proxyObject, Method method, Object[] args)             throws Throwable {         return method.invoke(map.get(proxyObject.getClass()), args);     }  }

 

   CBLIB代理:

package com.pinus.factory;  import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy;  public class BeanFactory implements MethodInterceptor {     private static Map<Object, Object> map;      private BeanFactory() {     }      /**      * 创建BeanFactory实例      */     public static BeanFactory getInstance() {         map = new HashMap<Object, Object>();         return new BeanFactory();     }      /**      * 得到原类型对象      */     @SuppressWarnings("rawtypes")     public Object getBean(Class classType) {         try {             return classType.newInstance();         } catch (Exception e) {             e.printStackTrace();             throw new RuntimeException(e);         }     }      /**      * 得到代理类型对象      */     @SuppressWarnings("rawtypes")     public Object getProxyBean(Class classType) {         Object proxyObject;         Enhancer enhancer = new Enhancer();         enhancer.setSuperclass(classType);         enhancer.setCallback(this);         proxyObject = enhancer.create();         Object targetObject = this.getBean(classType);         map.put(proxyObject.getClass(), targetObject);         System.out.println(map.size());         return proxyObject;     }      @Override     public Object intercept(Object proxyObject, Method method, Object[] args,             MethodProxy methodProxy) throws Throwable {         // TODO Auto-generated method stub         return method.invoke(map.get(proxyObject.getClass()), args);     }  }

总结:JDK代理:动态生成一个类实现目标对象类型所实现的所有接口,将此类实例化后返回

      CGLIB代理:动态生成一个类继承目标对象类型,将此类实例化后返回

         方法调用:实际上还是调用原目标对象中的方法,动态代理对象并未使用

    你可能想看:

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

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

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

    分享给朋友:

    “JDK代理 与 CBLIB代理 总结” 的相关文章

    如何高效管理Ubuntu服务器:从基础到高级的全面指南

    管理Ubuntu服务器是一个需要掌握多种技能的任务。从选择合适的Linux发行版到系统初始化,再到账号和权限管理,每一个环节都至关重要。以下是一些基础的管理技巧,帮助你更好地配置和管理Ubuntu服务器。 1.1 选择合适的Linux发行版 在国内,常用的Linux发行版有CentOS、Ubuntu...

    RackNerd IPv6 设置指南:轻松配置高效网络体验

    在探索虚拟私有服务器(VPS)时,RackNerd成为了很多用户的首选。作为一家专注于高性能VPS服务的公司,RackNerd以其可靠的服务器托管解决方案而闻名。它的服务器主要部署在ColoCrossing和Multacom机房,这让RackNerd在提供服务时具备了很多灵活性和优势。 RackNe...

    搬瓦工最新优惠码分享,让你享受更多折扣

    在寻找优质VPS时,搬瓦工(BandwagonHost)绝对是一个热门的选择。为了让用户在购买过程中享受到更多优惠,现在分享一下搬瓦工最新的优惠码。 最新优惠码是BWHCGLUKKB,通过这个优惠码用户可以享受6.78%的循环优惠,这一优惠适用于搬瓦工全场的商品,无论是新购、续费还是升级服务,都能获...

    国外离线下载服务比较:如何选择最适合你的工具

    在信息时代,国外离线下载服务成为了许多用户的得力助手。这种服务的主要功能,是让用户在没有网络连接的情况下,也能提前将所需的数据或文件下载到本地或云端存储中。这种方法特别适合那些经常出行或在网络不佳的环境中工作的用户。通过离线下载,用户可以在网络恢复后更快、更方便地访问所需内容。 离线下载的应用非常广...

    Vultr注册送50美元优惠活动详细指南

    Vultr新用户注册活动概述 在寻找合适的云服务提供商时,我总是觉得选对平台会显得尤为重要。Vultr做为一个非常受欢迎的云服务提供商,给新用户带来了一项非常吸引人的优惠活动——注册即送50美元。这个活动让我感到非常兴奋,也让更多人有机会体验到高性价比的VPS服务。 这项活动非常简单易行。新用户只需...

    如何有效购买和使用代理IP服务,满足多种需求 - IP够卖指南

    在我们开始讨论“IP够卖”的购买与应用流程之前,理解购买渠道的多样性非常重要。很多人可能会问,究竟从哪里可以获取到合适的代理IP?实际上,有几种渠道可以选择,适合不同需求的用户。 首先,专业代理服务商无疑是最推荐的选择。这类服务商通常提供稳定且高质量的代理服务,能满足诸多使用场景,比如数据爬虫、电商...