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

代理模式之动态代理动态代理模式

11小时前CN2资讯

动态代理,

         1)代理对象,不需要实现接口;

         2)代理对象的生成,是利用JDKAPI, 动态的在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型;);

         3)  动态代理, JDK代理, 接口代理;

JDK中生成代理对象的API:

|-- Proxy static Object newProxyInstance( ClassLoader loader, 指定当前目标对象使用类加载器 Class<?>[] interfaces, 目标对象实现的接口的类型 InvocationHandler h 事件处理器 )

思考:

         有一个目标对象,想要功能扩展,但目标对象没有实现接口,怎样功能扩展?

         Class  UserDao{}

         // 子类的方式

         Class subclass  extends  UserDao{}                                    

         以子类的方式实现(cglib代理)


package loaderman.b_dynamic; // 接口 public interface IUserDao { void save(); } package loaderman.b_dynamic; /** * 目标对象 * */ public class UserDao implements IUserDao{ @Override public void save() { System.out.println("-----已经保存数据!!!------"); } } package loaderman.b_dynamic; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 给所有的dao创建代理对象【动态代理】 * * 代理对象,不需要实现接口 * */ public class ProxyFactory { // 维护一个目标对象 private Object target; public ProxyFactory(Object target){ this.target = target; } // 给目标对象,生成代理对象 public Object getProxyInstance() { return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("开启事务"); // 执行目标对象方法 Object returnValue = method.invoke(target, args); System.out.println("提交事务"); return returnValue; } }); } } package loaderman.b_dynamic; public class App { public static void main(String[] args) { // 目标对象 IUserDao target = new UserDao(); // 【原始的类型 class cn.loaderman.b_dynamic.UserDao】 System.out.println(target.getClass()); // 给目标对象,创建代理对象 IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance(); // class $Proxy0 内存中动态生成的代理对象 System.out.println(proxy.getClass()); // 执行方法 【代理对象】 proxy.save(); } }
    你可能想看:

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

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

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

    分享给朋友:

    “代理模式之动态代理动态代理模式” 的相关文章

    中国电信CN2目录价格解析——助力企业高效互联

    在互联网经济飞速发展的今天,企业对网络的需求早已不限于简单的网页浏览和邮件传输。无论是跨国企业、互联网公司,还是电子商务平台,都需要一个稳定、高速、低延迟的网络环境来支撑业务的高效运转。而中国电信CN2作为国内领先的通信网络服务之一,凭借其优质的网络资源和服务,成为众多企业的首选解决方案。但对于初次...

    APT是什么?高级持续性威胁的定义与防御策略

    APT是指高级持续性威胁(Advanced Persistent Threat),它代表了一种针对特定目标进行的长期和有计划的网络攻击。这种攻击的高端特征在于,攻击者会在施加攻击之前,详细调查并了解攻击对象的业务流程和系统架构。换句话说,APT并不是一种简单随机的攻击,而是通过深入分析和细致的侦查工...

    Debian 修改DNS 设置的详细指南及常见问题解决方法

    了解DNS及其重要性 在日常使用网络的过程中,我们常会遇到“DNS”这个术语。简单来说,DNS(Domain Name System)是互联网的“电话簿”。它将我们输入的域名转换为计算机理解的IP地址,确保我们能够顺利访问网站。如果没有DNS,我们将不得不记住每一个网站的IP地址,那可真是太麻烦了!...

    宝塔面板安装指南:轻松搭建与管理云服务器

    宝塔面板是一款专为服务器运维设计的工具,以其简单易用的操作界面受到广泛欢迎。我在使用云服务器建站时,发现宝塔面板让繁琐的服务器管理变得轻松自如。它支持一键安装LAMP和LNMP环境,用户可以在数分钟内搭建出一个完整的网站环境,而且它还集成了监控、数据库管理、FTP等多种功能,真是一个多面手。 无论是...

    Hostwinds LLC:卓越的网络托管服务与高性价比优势

    Hostwinds LLC成立于2010年,位于美国西雅图。这家公司一直专注于提供多种网络托管服务,包括虚拟主机、虚拟专用服务器(VPS)和独立服务器。在这个竞争激烈的市场中,Hostwinds凭借其独特的优势和不断升级的服务赢得了客户的信赖。我个人认为,Hostwinds的历史反映了它对客户需求的...

    深入了解DMIT不同线路,优化您的网络体验

    在开始深入了解DMIT这一知名VPS提供商之前,我想先分享一下我对于它的初步印象。DMIT的使命是为用户提供高性能、稳定的VPS解决方案,特别是在跨境访问方面表现不俗。他们采用的CN2优化线路更是让其在众多竞争对手中脱颖而出。通过不断的发展与创新,DMIT为不同需求的用户提供了多种线路选择。 DMI...