代理技术知识点汇总

静态代理

按照自己理解写的,结合了《Spring揭秘》中作者对代理的理解。建议先看下面的动态代理的例子,就是按照下面例子改编的

等价的静态代理的例子为:

//针对Hello的静态代理
public class StaticProxy {
    private final Hello hello;

    public StaticProxy(Hello hello) {
        this.hello = hello;
    }

    //代理Hello实例化对象的hello方法
    public void hello() {
        System.out.println("Before Method");
        hello.hello();
        System.out.println("After Method");
    }
}

虽然对所有Hello接口的实现类都有效,但是如果存在很多个接口的实现类都需要相同的需求,依旧需要创建很多个这样的Proxy出来,非常的不方便。

动态代理

使用动态代理需要该类需要代理的方法是重写于一个接口的,代码如下:

实现类(直接使用了lambda表达式简写了匿名内部类):

简单输出一句:hello Method

一种代理模式演示(在方法调用前后进行输出)

感觉这种就非常好理解了,运行的逻辑都被封装在了InvocationHandler的invoke方法里了

使用的时候:

输出如下:

最后更新于

这有帮助吗?