Java静态代理

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java静态代理相关的知识,希望对你有一定的参考价值。

Java静态代理

1 概念

代理的意思,顾名思义就是让别人去帮忙做一些事情,在现实生活中也是处处都存在的代理。比如租房找的中介,买东西找的代购等等。在java的世界,代理也是同样的意思,一个类的方法执行后只用一个功能,那么我想去让功能更强大,或者增加其他功能的时候,这时候考虑到单一原则,而且尽量不去修改原代码,我们就会使用代理类。

代理类就是在帮助我们实现原有的方法的时候,可以用额外的扩增其他的功能。

在这里插入图片描述

什么是静态代理:

静态代理就是指我们在给一个类扩展功能的时候,我们需要去书写一个静态的类,相当于在之前的类上套了一层,这样我们就可以在不改变之前的类的前提下去对原有功能进行扩展。

静态代理的缺点:

因为静态代理是需要我们书写一个代理类,对原有的类的功能进行增强,但是一个类比较好些,如果在工作中有大量的类需要我们去代理,那么使用静态代理的方式,就会让我们的代码量大大增加。

2 java中的静态代理

2.1 前期准备(entity)

结婚方法的接口

public interface Marry {
    /**
     * 结婚方法
     */
    void marry();
}

人类接口

public interface Person extends Marry{
    /**
     * 说话方法
     */
    void talk();
}

男人类

public class Man implements Person{
    /**
     * 姓名
     */
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 重写结婚方法
     */
    @Override
    public void marry() {
        System.out.println(name+"在结婚");
    }

    /**
     * 重写说话方法
     */
    @Override
    public void talk() {
        System.out.println(name+"在说话");
    }
}

2.2 代理类

针对结婚写的静态代理类

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName ProxyDemo
 * @ClassName MarryProxy
 * @Description 结婚代理
 * @createTime 2021年05月23日 12:44:00
 */
public class MarryProxy implements Marry {
    // 代理对象
    private Person person;

    public void setPerson(Person person) {
        this.person = person;
    }

    // 代理结婚
    @Override
    public void marry() {
        // 结婚前准备
        beforeMarry();
        // 结婚
        person.marry();
        // 结婚后
        afterMarry();

    }
    private void beforeMarry(){
        System.out.println("结婚前准备");
    }
    private void afterMarry(){
        System.out.println("结婚后准备");
    }
}

2.3 测试类

/**
 * @author 晓龙
 * @version 1.8.271
 * @ProtectName ProxyDemo
 * @ClassName Test
 * @Description 测试类
 * @createTime 2021年05月23日 12:42:00
 */
public class Test {
    public static void main(String[] args) {
        // 实例一个正常的man
        Man man = new Man();
        man.setName("peter");
        // man结婚
        man.marry();
        System.out.println("=========分割线============");
        // 实例代理类--->中介公司
        MarryProxy marryProxy = new MarryProxy();
        // 设置代理对象
        marryProxy.setPerson(man);
        // 结婚代理
        marryProxy.marry();
    }
}

结果

在这里插入图片描述

以上是关于Java静态代理的主要内容,如果未能解决你的问题,请参考以下文章

Java动态代理

Java动态代理

Java动态代理

Java 静态代理

Java 静态代理和动态代理

java静态代理与动态代理简单分析