关于代理模式的个人理解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45614509/article/details/102748947

Proxy代理模式是一种结构设计模式。主要是解决直接访问对象所带来的问题。

代理,分为动态代理和静态代理。

Subject : 抽象接口

RealSubject:抽象接口的实现类

Proxy:代理类,实现Subject。持有RealSubject对象的实例,其中所有的方法都是调用 RealSubject 来实现。

Proxy 代理类因为是通过调用 RealSubject 来实现,所以就可以在 RealSubject 的方法调用之前以及之后做一些事情,也就是所谓的面向切面编程(AOP)。

静态代理,顾名思意,所要代理类是直接编写在Java代码中的,在编译时就已经固定下来。而动态代理,则是在运行时才实际生成代理类。


JDK 动态代理示例代码:

package com.java.test.jvm;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicProxyTest {

    interface IHello {
        void sayHello();
    }

    static class Hello implements IHello {

        @Override
        public void sayHello() {
            System.out.println("hello world");
        }
    }

    static class DynamicProxy implements InvocationHandler {

        Object originalObj;

        Object bind(Object originalObj) {
            this.originalObj = originalObj;
            //在这里就会生成一个代理对象,实现目标接口,也就是第二个参数传入的方法。然后自动生成的对象就就会去实现目标接口
            return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
                    originalObj.getClass().getInterfaces(),
                    this);
        }


        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("welcome");
            return method.invoke(originalObj, args);
        }

    }

    public static void main(String[] args) {
        IHello hello = (IHello) new DynamicProxy().bind(new Hello());
        hello.sayHello();
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_45614509/article/details/102748947