zoukankan      html  css  js  c++  java
  • 【JVM学习笔记】动态代理

    基于JDK的动态代理例子如下

    接口 Subject 

    public interface Subject {
        public abstract void request();
    }

    实现类RealSubject

    public class RealSubject implements Subject {
        @Override
        public void request() {
            System.out.println("from realsubjct");
        }
    }

    代理类

    public class DynamicSubject implements InvocationHandler {
    
        private Object sub;
    
        public DynamicSubject(Object obj) {
            this.sub = obj;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("before calling: " + method);
            method.invoke(this.sub, args);
            System.out.println("after calling: "+method);
            return null;
        }
    }

    客户端类

    public class Client {
        public static void main(String[] args) {
            RealSubject rs = new RealSubject();
            InvocationHandler handler = new DynamicSubject(rs);
            Class<?> cls = rs.getClass();
    
            Subject subject = (Subject) Proxy.
                    newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), handler);
            subject.request();
        }
    }

    执行结果

    before calling: public abstract void com.learn.jvm.Subject.request()
    from realsubjct
    after calling: public abstract void com.learn.jvm.Subject.request()
  • 相关阅读:
    Python Semaphore
    Python 互斥锁
    Python 递归锁
    Python GIL锁
    Python 线程调用
    进程与线程
    Python paramiko模块
    Python SocketServer模块
    MonoDevelop with Visual Studio to Linux and Mac OSX maintaining a single code base for all platforms.
    mime大全收集
  • 原文地址:https://www.cnblogs.com/heben/p/11478846.html
Copyright © 2011-2022 走看看