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

静态代理详解[通俗易懂]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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NetScaler实现域名http到https的自动跳转

    NetScaler实现域名http到https的自动跳转很多场景下,有对外提供加密web站点(HTTPS)的需求,比如大部分在线交易/支付网站,SSL×××等都需要终端输入完整的URL如https://www.test.com才能打开页面。但大部分用户的使用习惯是只在浏览器地址栏输入域名,默认以http协议方式打开,但由于服务器端并不存在http://www.test.com,从而无法打开页面,影响用户体验。…

    2022年10月3日
    3
  • SELinux深入理解

    SELinux深入理解

    2021年10月27日
    52
  • sqlmap中文手册pdf_sqlquery工具

    sqlmap中文手册pdf_sqlquery工具这是我自己翻译的Sqlmap1.1.10的中文手册。Sqlmap是十分著名的、自动化的SQL注入工具。为了较为系统地学习Sqlmap,我决定翻译一遍Sqlmap的用户手册,于是便有了此文。由于我英语学得很差,所以翻译地不好。基本上是意译,还加入了我自己的东西,和原文有较大差距。

    2022年10月20日
    7
  • 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

    2022年1月20日
    53
  • linux添加防火墙_centos防火墙设置与端口开放的方法

    linux添加防火墙_centos防火墙设置与端口开放的方法一、介绍当设置ip过滤的时候,如果ip较多,经常修改,修改防火墙规则比较麻烦,可以使用ipset,ipset是一个集合,防火墙可以添加集合,只需要一条防火墙规则就可以实现整个集合里面ip的过滤iptables-IINPUT-mset–match-setbanipsrc-ptcp–destination-port80-jDROPTYPENAME:=method:datatype[,datatype[,datatype]]可以使用的method:bitmap,ha

    2022年10月6日
    3
  • Java多线程超详解

    Java多线程超详解引言随着计算机的配置越来越高,我们需要将进程进一步优化,细分为线程,充分提高图形化界面的多线程的开发。这就要求对线程的掌握很彻底。那么话不多说,今天本帅将记录自己线程的学习。线程的相关API//获取当前线程的名字Thread.currentThread().getName()1.start():1.启动当前线程2.调用线程中的run方法2.run():通常需要重写Thread类中的此…

    2022年6月6日
    34

发表回复

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

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