• 动态代理


    1.  接口类

    package com.dynamicProxy;
    
    public interface User {
        int add(int i, int j);
        int sub(int i, int j);
        int mul(int i, int j);
        int div(int i, int j);
    }

    2. 实现类

    package com.dynamicProxy;
    
    public class UserImpl implements User {
    
        public int add(int i, int j) {
            return i + j;
        }
    
        public int sub(int i, int j) {
            return i - j;
        }
    
        public int mul(int i, int j) {
            return i*j;
        }
    
        public int div(int i, int j) {
            return i/j;
        }
    
    }

    3. 代理类

    package com.dynamicProxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.rmi.server.LoaderHandler;
    import java.util.Arrays;
    
    public class UserImplProxy {
        //1. 指定被代理的对象
        private User u = null;
        
        //2. 传入被代理的对象
        public UserImplProxy(User u) {
            this.u = u;
        }
        
        //3. 定义一个返回 User 对象的方法
        public User getProxyObject() {
            User userProxy = null;
            
            //5. 对象由那个类加载器负责
            ClassLoader loader = u.getClass().getClassLoader();
            
            //6. 代理对象的类型,  即那些方法
            Class[] interfaces = new Class[] {User.class};
            
            //7. 当调用代理对象的方法时   执行其中的方法
            InvocationHandler h = new InvocationHandler() {
                /**
                 * proxy: 正在返回的那个代理对象
                 * method: 代理对象执行的方法
                 * args: 执行参数
                 */
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    System.out.println("The method "+method.getName()+" begin with "+Arrays.asList(args));
                    Object result = method.invoke(u, args);
                    return result;
                }
            };
            
            //4. 通过代理方法来处理 User 对象的方法
            userProxy = (User) Proxy.newProxyInstance(loader, interfaces, h);
            
            return userProxy;
        } 
    }

    4. 测试类

    package com.dynamicProxy;
    
    public class Test {
        public static void main(String[] args) {
            User u = new UserImpl();
            
            User u2 = new UserImplProxy(u).getProxyObject();
            
            int result = u2.add(20,  4);
            System.out.println(result);
            
            result = u2.sub(20,  4);
            System.out.println(result);
        }
    }
  • 相关阅读:
    2020系统综合实践 第三次实践作业
    2020系统综合实践 第二次实践作业
    2020系统综合实践 第一次实践作业
    第03组 Beta版本演示
    第03组 Beta冲刺(4/4)
    第03组 Beta冲刺(3/4)
    OO第四次博客作业
    OO第三次博客作业
    OO第二次博客作业
    OO第一次博客作业
  • 原文地址:https://www.cnblogs.com/redhat0019/p/8874959.html
Copyright © 2020-2023  润新知