java中的静态代理

Posted qunincey

tags:

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

发现python中的元类和java中的动态代理很像,打算写两篇随笔总结一下java中的代理机制

代理模式直白的说就是增强某一个类的功能,在实际开发中,我们大多数时候出于维护旧代码或者解耦的原因,不能去改动原来的类,这时候代理类就派上用场了

那么面对对象的设计思路中,增强一个类的除了继承外,我们还可以新建一个代理类实现被代理类的接口,在代理类中调用被代理类的方法,看图可能更直观一点

下面直接上代码

/**
 接口定义
 */
public interface TargetInterface {
    void say();
    void eat();
}

/**
 被代理类
 */
public class ProxyTarget implements TargetInterface {
    public void say(){
        System.out.println(this);
    }

    @Override
    public void eat() {
        System.out.println("我是被代理对象eat");
    }

    @Override
    public String toString() {
        return "我是要被代理的类";
    }
    public static void main(String[] args) {
        new ProxyTarget().say();
    }
}

/**
 *代理类
 */
public class TestProxy implements TargetInterface {

private TargetInterface targetInterface;

public TestProxy(TargetInterface targetInterface) {
this.targetInterface = targetInterface;
}

public void say() {
targetInterface.say();
System.out.println("我变强了");
}

@Override
public void eat() {
targetInterface.say();
System.out.println("我变强了");
}

public static void main(String[] args) {//测试代码


TargetInterface interfa = new ProxyTarget();
TestProxy testProxy = new TestProxy(interfa);
testProxy.eat();
}
}

输出

我是要被代理的类
我变强了

这样在原来类不变的情况下,我们增强了原来的类,但静态代理有几个弊端,如果我们要实现的类比较多,每一个接口都要写一个代理类,增加负担,为了解决这个问题,引入动态代理的机制,动态生成代理类,下一篇随笔介绍

 

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

代理模式(动态)

java动态代理中的invoke方法是如何被自动调用的

Java设计模式-代理模式之动态代理(附源代码分析)

十分钟理解Java中的动态代理

java 代理模式(静态代理动态代理Cglib代理) 转载

深入浅出JDK动态代理