程序员码农的世界开发经验随笔

jdk动态代理

2019-05-25  本文已影响9人  山东大葱哥

动态代理介绍

1.概念
动态代理是指动态的在内存中构建代理对象,动态是相对于静态代理而言的。
有两个重要特点:

  1. 实现方式

jdk动态代理的概念

jdk动态代理的组成

案例演示

  1. 业务接口(同静态代理)

  2. 业务实现类(同静态代理)

  3. 调用处理器

    public class JDKProxy implements InvocationHandler {
        private Object target;//真正的业务实现类对象,用来调用具体的业务方法
    
        /**
         * 绑定业务对象并返回一个代理类
         */
        public Object bind(Object target) {
            this.target = target;  //接收业务实现类对象参数
    
            //通过反射机制,创建一个代理类对象实例并返回。用户进行方法调用时使用
            //创建代理对象时,需要传递该业务类的类加载器(用来获取业务实现类的元数据,
            // 在包装方法是调用真正的业务方法)、接口、handler实现类
            return Proxy.newProxyInstance(target.getClass().getClassLoader(),
                    target.getClass().getInterfaces(), this);
        }
    
        /**
         * 包装调用方法:进行预处理、调用后处理
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            Object result = null;
            System.out.println("预处理操作——————");
            //调用真正的业务方法
            result = method.invoke(target, args);
    
            System.out.println("调用后处理——————");
            return result;
        }
    
    }
    
  4. 业务调用

    public class JDKProxyApplication {
        public static void main(String[] args) {        
            IAccountService accountService = new AccountServiceImpl();
            JDKProxy proxy = new JDKProxy();
            IAccountService accountServiceProxy = (IAccountService) proxy.bind(accountService);
            accountServiceProxy.queryAccount();
            accountServiceProxy.updateAccount();
        }
    }
    

jdk动态代理特点及问题分析

  1. 特点分析
  1. 问题分析
上一篇下一篇

猜你喜欢

热点阅读