静态代理详解(定义作用及使用示例)

静态代理详解(定义作用及使用示例)-mikechen

静态代理是代理的一种实现方式,在Spring AOP也有涉及,下面我就来详解静态代理@mikechen

静态代理定义

静态代理是一种设计模式,它通过创建一个代理对象,来控制对原始对象的访问。

在静态代理中,代理类是在编译期间就已经创建好了,并且代理类与原始类实现相同的接口,代理类中持有一个对原始类的引用。

 

静态代理作用

静态代理的作用主要是在不改变目标对象的前提下,对目标对象的功能进行扩展和增强。

静态代理常用的场景包括:日志记录、事务处理、权限控制等。

 

静态代理的缺点

静态代理的优点

静态代理的优点是实现简单,易于理解和调试。

 

静态代理的缺点

虽然静态代理的实现比较简单,但是每个被代理对象都需要创建一个代理类,因此在代理对象比较多时,会导致代码冗余和维护成本增加。

如果代理类和目标类接口发生变化,就需要重新编写代理类的源代码,因此静态代理通常适用于代理类和目标类的接口比较稳定,且代理类只需要代理一个目标类的情况。

 

静态代理使用示例

1.定义一个接口

该接口定义了目标对象的行为,静态代理对象需要实现该接口,以实现对目标对象的代理。

如下所示:

public interface Subject {
    void request();
}

 

2.实现目标对象

实现该接口的目标对象,它是真正实现业务逻辑的对象。

如下所示:

public class RealSubject implements Subject {
    public void request() {
        System.out.println("RealSubject request() method is called.");
    }
}

 

3.实现代理对象

代理对象也需要实现上述接口,它包含一个对目标对象的引用,可以在该对象上执行额外的操作。

如下所示:

public class ProxySubject implements Subject {
    private Subject realSubject;
    
    public ProxySubject(Subject realSubject) {
        this.realSubject = realSubject;
    }
    
    public void request() {
        // 在目标对象执行前的操作
        System.out.println("ProxySubject before request() method is called.");
        
        // 执行目标对象的方法
        realSubject.request();
        
        // 在目标对象执行后的操作
        System.out.println("ProxySubject after request() method is called.");
    }
}

 

4.静态代理使用

在客户端代码中,创建目标对象和代理对象,并使用代理对象调用目标对象的方法。

public static void main(String[] args) {
    Subject realSubject = new RealSubject();
    Subject proxySubject = new ProxySubject(realSubject);
    proxySubject.request();
}

输出:

ProxySubject before request() method is called.
RealSubject request() method is called.
ProxySubject after request() method is called.

以上就是静态代理详解,更多内容请查看:Java代理模式详解(定义实现及应用场景)

如果还想了解动态代理,请查看:静态代理和动态代理的区别(4大区别详解)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法