Java实现静态代理[通俗易懂]

Java实现静态代理[通俗易懂]使用静态代理时需要让目标对象和代理对象一起实现相同的接口或者继承相同的父类。这样做的目的就是为了通过调用代理对象中和目标对象相同的方法来实现调用目标对象的方法,从而达到代理的效果。第一步定义接口publicinterfaceIStatictProxy{voidprint();}第二步实现接口(目标对象)@Slf4jpublicclassTargetImplimplementsIStatictProxy{@Overridepublic

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

Jetbrains全系列IDE稳定放心使用

使用静态代理时需要让目标对象和代理对象一起实现相同的接口或者继承相同的父类。这样做的目的就是为了通过调用代理对象中和目标对象相同的方法来实现调用目标对象的方法,从而达到代理的效果。

第一步定义接口

public interface IStatictProxy {

    void print();
}

第二步实现接口(目标对象)

@Slf4j
public class TargetImpl implements IStatictProxy{
    @Override
    public void print() {
        log.info("静态代理目标对象实现类打印!");
    }
}

第三步代理类实现接口

代理类中注入接口,构造方法同时显示声明

@Slf4j
public class StaticProxyImpl implements IStatictProxy {

    // 通过接口聚合被代理的类
    private IStatictProxy proxy;

    // 构造方法
    public StaticProxyImpl(IStatictProxy proxy) {
        this.proxy = proxy;
    }

    @Override
    public void print() {
        log.info("代理对象中的打印方法执行开始!");
        proxy.print();
        log.info("代理对象中的打印方法执行结束!");
    }

    public static void main(String[] args) {
        TargetImpl target = new TargetImpl();
        StaticProxyImpl staticProxy = new StaticProxyImpl(target);
        staticProxy.print();
    }
}

第四部 运行代理类

Connected to the target VM, address: ‘127.0.0.1:8238’, transport: ‘socket’
15:58:58.310 [main] INFO com.hkwl.hkboot.smp.proxy.StaticProxyImpl – 代理对象中的打印方法执行开始!
15:58:58.317 [main] INFO com.hkwl.hkboot.smp.proxy.TargetImpl – 静态代理目标对象实现类打印!
15:58:58.317 [main] INFO com.hkwl.hkboot.smp.proxy.StaticProxyImpl – 代理对象中的打印方法执行结束!
Disconnected from the target VM, address: ‘127.0.0.1:8238’, transport: ‘socket’
 

Java实现静态代理[通俗易懂]

从上面的实现来看,总结优缺点如下:

优点:实现简单,容易理解,只要确保目标对象和代理对象实现共同的接口或继承相同的父类就可以在不修改目标对象的前提下进行扩展。

缺点:代理类和目标类必须有共同接口(父类),并且需要为每一个目标类维护一个代理类,当需要代理的类很多时会创建出大量代理类。一旦接口或父类的方法有变动,目标对象和代理对象都需要作出调整。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器学*系列文章索引

    0机器学习简介概念:多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改

    2021年12月30日
  • java子窗口获取父窗口句柄_java获得窗口句柄[通俗易懂]

    java子窗口获取父窗口句柄_java获得窗口句柄[通俗易懂]学会用按键精灵获取子窗口句柄来源:按键学院【按键精灵】电脑的桌面是最顶级的…Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在WindowsAPI中具有举足……其实呢,“抓抓”抓句柄的功能,实现起来是很容易的,我们一起来操作看看。实现功能点击图片控件之后鼠标不松开,到了需要…

    2022年7月14日
  • 串口调试助手fx2n_安信可串口调试助手

    串口调试助手fx2n_安信可串口调试助手安信可串口调试助手是由安信可官方出品的一款非常好用的串口调试工具,利用安信可串口调试助手可以实现电脑和模块之间的串口通信,非常方便,有需要可以下载使用。相关软件软件大小版本说明下载地址安信可串口调试助手是由安信可官方出品的一款非常好用的串口调试工具,利用安信可串口调试助手可以实现电脑和模块之间的串口通信,非常方便,有需要可以下载使用。功能介绍ESP8266的串口调试助手,下载即用,可以实现电脑和模…

    2022年5月3日
  • 缓存

    缓存

    2021年3月12日
  • mysql 截取字符串部分值_mysql截取字符串取值

    mysql 截取字符串部分值_mysql截取字符串取值使用mysql过程中根据实际业务的开发需求和表的设计有时候我们需要在sql中根据某个字符串截取并且取值:demo如下:ifnull(max(SUBSTRING_INDEX(c.check_score,’,’,-1)),’-‘)swjdf//按照,截取check_score这个字段的值,-1取的是倒数第一位即最后一位SUBSTRING_INDEX函数语法:SUBSTRING_INDEX(str…

    2022年6月11日
  • Window永久关闭默认共享

    windows默认共享你如果是在这里关闭的,开机之后默认共享文件夹又是打开的。管理工具—计算机管理—共享文件夹–共享下面介绍一种简单的永久关闭默认共享文件夹。1.找到window的开机自启动文件夹,注:这是所有用户登录都会开机自启动文件夹。C:\ProgramData\Microsoft\Windows\StartMenu\Programs\StartUp2.创建一个bat脚本,然后开机就能自动关闭默认共享文件夹。…

    2022年4月7日

发表回复

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

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