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;
        }
    }
  • 相关阅读:
    使用CNN和Python实施的肺炎检测
    使用OpenCV和Tensorflow跟踪排球的轨迹
    使用PyMongo查询MongoDB数据库!
    Pandas的crosstab函数
    日记9----web专用
    日记8----windows操作系统专用
    日记7----Java专用
    句柄类
    代理类
    C++ 计算机程序设计(西安交大mooc)
  • 原文地址:https://www.cnblogs.com/FivePointOne/p/13468079.html
Copyright © 2011-2022 走看看