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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PowerMockito 简介「建议收藏」

    PowerMockito 简介「建议收藏」powerMockito单元测试准备1在需要执行单测的类上注解@RunWith(PowerMockRunner.class)2对于需要mock私有方法的需要注解@PrepareForTest(FooServiceImpl.class)私有方法mockcom.mock.test.service.impl.FooServiceImplTest.private_method()webcontrollermockcom.mock.test.controllerInjectMocks

    2025年8月5日
    2
  • ActiveMQ 从零开始 学习日志(一)

    ActiveMQ 从零开始 学习日志(一)ActiveMQ 从零开始 学习日志(一)

    2022年4月20日
    40
  • go struct转map_golang map

    go struct转map_golang mapGo字符串转Map和Map的嵌套取值想用Go写爬虫联系一下语法的,结果数据类型转换还不熟悉。map嵌套取值就会报错typeinterface{}doesnotsupportindexing字符串转Map//示例字符串resString:=`{ “args”:{}, “headers”:{ “Accept-Encoding”:”gzip”, “Host”:”httpbin.org”, “User-Agent”:”GRequests/0.10

    2022年9月10日
    3
  • 服务降级方案

    服务降级方案    开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。本文将详细聊聊降级。     为什么需要降级:当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。      降级的最终目:保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)    …

    2022年6月5日
    50
  • 实用技巧——小问题的一些解决办法

    收集一些遇到的小问题,并分享解决方案!

    2022年2月25日
    52
  • 仓库管理(WMS)系统及其组成

    仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息、资源、行为、存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求。详情连接地址:https://baike.baidu.com/item/%E4%BB%93%E5%82%A8%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F/3212656现代仓储管理系统…

    2022年4月4日
    51

发表回复

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

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