静态代理详解[通俗易懂]

静态代理详解[通俗易懂]1.什么是静态代理?代理这个词是来源于Java设计模式中的代理模式,代理模式最简单的理解就是通过第三方来代理我们的工作比如中介,房东需要将自己的房子租出去,而租客需要租房子,三者关系如此租客租房子一般都找不到房东,房东也不会轻易将自己暴露给广大租客,因此就需要中介来充当这个中间关系因此租客就只能通过中介来进行租房子这个工作,不需要通过房东,这就叫做代理—-就是中介代理房东来处理租房子这件事情那么我们应用于Java中又是什么样的情况呢?首先创建一个主题接口(别问为什么创建接口,J.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

什么是静态代理?

代理这个词是来源于Java设计模式中的代理模式,代理模式最简单的理解就是通过第三方来代理我们的工作

比如中介,房东需要将自己的房子租出去,而租客需要租房子,三者关系如此

租客租房子一般都找不到房东,房东也不会轻易将自己暴露给广大租客,因此就需要中介来充当这个中间关系

因此租客就只能通过中介来进行租房子这个工作,不需要通过房东,这就叫做代理—-就是中介代理房东来处理租房子这件事情

那么我们应用于Java中又是什么样的情况呢?

首先创建一个主题接口(创建接口,JDK动态代理就是以接口、对象、代理对象为基础)

public interface UserDao(){
    void add();
}

然后创建该接口的实现类(真实主题),也称为被代理类(主要功能就在于该类中),我们需要一个代理类来代理这个类实现他的add方法

public class UserDaoImpl implements UserDao(){
    @Override
    public void add(){
        System.out.println("add.....");
    }
}

然后我们创建上述实现类的代理类(两个类需要实现共同的主题接口,这样才能对原有功能进行增强),使用代理类对原有类进行包装

public class UserDaoProxy implements UserDao{
    private UserDao target;
    public UserDaoProxy(UserDao target){
        this.target = target;
    }

    public void add(){
        System.out.println("before...");
        target.add();
        System.out.println("after...");
    }
}

然后我们进行测试

@Test
    public void test1(){
       UserDao userDao = new UserDaoImpl();
       UserDaoProxy proxy = new UserDaoProxy(userDao);
       proxy.add();
    }

此图为结果输出

静态代理详解[通俗易懂]

 

可能有人会问,这样是不是多此一举,为什么要去代理呢,而且前两段代码就能实现的功能,为什么还需要一个代理类去代理它,这就涉及到我们的工作需求,在不改变实现类的情况下,对实现类进行功能的增加,而上述代码中两个输出语句就是对功能的增强(当然可以根据实际需求来添加实际代码),由此而产生了代理类,生成代理对象

而所谓的静态就是在创建代理类的时候,接口和被代理类都已经被固定了,无法改变,代理类就只能这一种类,我们主要的是实现代理功能,实际上已经完成了这个功能,

当实际开发中有很多这样的主题接口和类需要功能增强时,就需要更多的代理类,即每一个主题接口都得创建一个代理类,会造成代码的繁多和冗余,因此就产生了我们的动态代理技术https://blog.csdn.net/qq_42051306/article/details/114141307?spm=1001.2014.3001.5501

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181178.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月16日 下午11:16
下一篇 2022年10月16日 下午11:36


相关推荐

  • 第一次尝试使Windows Live Writer发布日志

    第一次尝试使Windows Live Writer发布日志今天早上想把网上看到的一些好文章转到自己日志中 发现很困难还要受网速的限制 刚好看到 blog 上边有个 blog 客户端推荐 livewriter 于是下载了最新的 live 安装包 安装了除 msn 及插件外的一切东西 费了很长时间并且有很多是我不用的 既然这样了 就专心利用这个我想要的功能吧 livewriter 希望在它的帮助下我每天记日记总结的习惯能够延续下去 在 csdn 中一篇日志的指导下我修改下连接中的

    2026年3月26日
    2
  • ModifyStyle, ModifyStyleEx

    ModifyStyle, ModifyStyleEx1.wtl中的CListViewCtrl调用ModifyStyle,ModifyStyleEx,不起作用,改成_listCtrl.SetExtendedListViewStyle(_listCtrl.GetExtendedListViewStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES,0);参照http://www.cppblo

    2022年7月19日
    19
  • win10 windows许可证即将过期的解决办法

    win10 windows许可证即将过期的解决办法出现这个错误是因为安装的版本不是正版系统 每隔一段时间需要激活这次激活也费了一些时间 记录如下希望能对大家有所帮助 1 首先可以查看自己的许可什么什么时候会过期 windows R 调出命令运行窗口 输入 slmgr vbs xpr 2 用工具进行激活 MicroKMS 神龙版链接

    2026年3月17日
    1
  • Java实现拓扑排序

    Java实现拓扑排序1 问题描述给定一个有向图 求取此图的拓扑排序序列 那么 何为拓扑排序 定义 将有向图中的顶点以线性方式进行排序 即对于任何连接自顶点 u 到顶点 v 的有向边 uv 在最后的排序结果中 顶点 u 总是在顶点 v 的前面 2 解决方案 2 1 基于减治法实现实现原理 不断地做这样一件事 在余下的有向图中求取一个源 source PS 定义入度为 0 的顶点为有向图的源 它是一个没有输入边的顶点 然后把它和

    2026年3月17日
    1
  • matlab画图透明度_css设置透明度

    matlab画图透明度_css设置透明度直接上代码b=bar(1:10);alpha(0.1)alpha-向坐标区的对象添加透明度,值越小越透明下有两图做example:参考资料:bar画的图怎么设置颜色为透明?

    2022年10月9日
    4
  • JDK11安装包(win版)「建议收藏」

    链接:https://pan.baidu.com/s/1S10D5sA8WkYcyOjnE1M5IA提取码:pl26

    2022年4月11日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号