• 动态代理详解(一)应用示例


    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class MyInvocationHandler implements InvocationHandler{
        // 目标对象
        private Object target;
    
        /**
         * 构造方法
         * @param target 目标对象
         */
        public MyInvocationHandler(Object target) {
            super();
            this.target = target;
        }
    
    
        /**
         * 执行目标对象的方法
         */
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
            // 在目标对象的方法执行之前简单的打印一下
            System.out.println("--------before-------");
    
            // 执行目标对象的方法
            Object result = method.invoke(target, args);
    
            // 在目标对象的方法执行之后简单的打印一下
            System.out.println("--------after--------");
    
            return result;
        }
    
        /**
         * 获取目标对象的代理对象
         * @return 代理对象
         */
        public Object getProxy() {
            return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                    target.getClass().getInterfaces(), this);
        }
    }
    public interface UserService {
        /**
         * 目标方法
         */
        public abstract void add();
    }
    public class UserServiceImpl implements UserService{
        public void add() {
            System.out.println("-------add------");
        }
    }
    import org.junit.Test;
    
    public class ProxyTest {
        @Test
        public void testProxy() throws Throwable {
            // 实例化目标对象
            UserService userService = new UserServiceImpl();
    
            // 实例化InvocationHandler
            MyInvocationHandler invocationHandler = new MyInvocationHandler(userService);
    
            // 根据目标对象生成代理对象
            UserService proxy = (UserService) invocationHandler.getProxy();
    
            // 调用代理对象的方法
            proxy.add();
    
        }
    }

    运行结果:

    ------------------before------------------
    --------------------add---------------
    -------------------after------------------
  • 相关阅读:
    【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
    【安富莱TCPnet网络教程】HTTP通信实例
    【原创开源】网络版二代双通道示波器开源发布,支持电脑,手机和Pad等各种OS平台访问
    【RL-TCPnet网络教程】第40章 RL-TCPnet之TFTP客户端(精简版)
    【RL-TCPnet网络教程】第38章 TFTP简单文件传输基础知识
    linux添加环境变量
    linux字体安装
    lsof常用命令
    systemctl
    简单磁盘操作
  • 原文地址:https://www.cnblogs.com/zhimingxin/p/7509668.html
Copyright © 2020-2023  润新知