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;
        }
    }
  • 相关阅读:
    【Hello CC.NET】巧用模板简化配置
    【Hello CC.NET】自动化发布时 Web.config 文件维护
    Hello Jexus
    【Hello CC.NET】CC.NET 实现自动化集成
    SSE和WebSocket的用法和比较
    利用canvas实现鼠标跟随效果
    使用es6制作简单数独游戏
    ppt学习(3)
    ppt学习(2)
    ppt学习(1)
  • 原文地址:https://www.cnblogs.com/FivePointOne/p/13468079.html
Copyright © 2011-2022 走看看