zoukankan      html  css  js  c++  java
  • Java代理模式

    public class ServiceProxy implements InvocationHandler{
        /**目标对象*/
        private Object targetObj;
        
        public ServiceProxy(Object targetObj) {
            this.targetObj = targetObj;
        }
        /**
         * 产生一个代理对象
         * @return 代理对象
         */
        public Object getProxy() {
            //产生代理对象,第一个参数为目标对象的类加载器,第二个参数为目标对象实现的接口列表,第三个参数为InvocationHandler的实现类
            //当调用代理对象方法时,会执行InvocationHandler实现类的invoke方法
            return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
                    targetObj.getClass().getInterfaces(), this);
        }
        /**
         * proxy 代理对象,method 目标方法对象,args 目标方法执行时传入的实参列表
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            
            //得到目标对象的属性列表
            Field[] f = targetObj.getClass().getDeclaredFields();
            for (Field field : f) {
                //类型是否为接口
                if(field.getType().isInterface()) {
                    //产生实现类对象
                    Object implObj = DaoFactory.getBean(field.getType().getSimpleName());
                    field.setAccessible(true);
                    field.set(targetObj, implObj);
                }
            }
            //执行目标对象的目标方法,得到目标方法执行后的返回结果
            Object returnObj = method.invoke(targetObj, args);
            return returnObj;
        }
    }
  • 相关阅读:
    JS事件冒泡、事件捕获和事件委托
    实现英文字母排序
    JavaScript异步加载的四种方法
    JavaScript作用域与作用域链
    JavaScript 自定义属性 data-*
    asycn和await
    style collectd
    JavaScript如何比较两个数组的内容是否相同
    VScode插件开发--M2D文档转换插件
    BOM笔记
  • 原文地址:https://www.cnblogs.com/FivePointOne/p/13468079.html
Copyright © 2011-2022 走看看