Package org.nutz.ioc

Examples of org.nutz.ioc.ObjectProxy


    this.contexts = tmp.toArray(new IocContext[tmp.size()]);
  }

  public ObjectProxy fetch(String key) {
    for (IocContext c : contexts) {
      ObjectProxy re = c.fetch(key);
      if (null != re)
        return re;
    }
    return null;
  }
View Full Code Here


    IocEventSet iocEventSet = iobj.getEvents();

    // 建立对象代理,并保存在上下文环境中 只有对象为 singleton
    // 并且有一个非 null 的名称的时候才会保存
    // 就是说,所有内部对象,将会随这其所附属的对象来保存,而自己不会单独保存
    ObjectProxy op = new ObjectProxy();
    if (iobj.isSingleton() && null != ing.getObjectName())
      ing.getContext().save(iobj.getScope(), ing.getObjectName(), op);

    // 为对象代理设置触发事件
    if (null != iobj.getEvents()) {
      op.setFetch(createTrigger(mirror, iocEventSet.getFetch()));
      op.setDepose(createTrigger(mirror, iocEventSet.getDepose()));
    }

    try {
      // 准备对象的编织方式
      DefaultWeaver dw = new DefaultWeaver();
      op.setWeaver(dw);

      // 为编织器设置事件触发器:创建时
      if (null != iobj.getEvents()) {
        dw.setCreate(createTrigger(mirror, iocEventSet.getCreate()));
      }

      // 构造函数参数
      ValueProxy[] vps = new ValueProxy[Lang.length(iobj.getArgs())];
      for (int i = 0; i < vps.length; i++)
        vps[i] = ing.makeValue(iobj.getArgs()[i]);
      dw.setArgs(vps);

      // 先获取一遍,根据这个数组来获得构造函数
      Object[] args = new Object[vps.length];
      for (int i = 0; i < args.length; i++)
        args[i] = vps[i].get(ing);

      // 缓存构造函数
      dw.setBorning((Borning<?>) mirror.getBorning(args));

      // 如果这个对象是容器中的单例,那么就可以生成实例了
      // 这一步非常重要,它解除了字段互相引用的问题
      Object obj = null;
      if (iobj.isSingleton()) {
        obj = dw.born(ing);
        op.setObj(obj);
      }

      // 获得每个字段的注入方式
      FieldInjector[] fields = new FieldInjector[iobj.getFields().length];
      for (int i = 0; i < fields.length; i++) {
View Full Code Here

    // 创建对象创建时
    IocMaking ing = new IocMaking(this, mirrors, cntx, maker, vpms, name);

    // 从上下文缓存中获取对象代理
    ObjectProxy op = cntx.fetch(name);

    // 如果未发现对象
    if (null == op) {
      // 线程同步
      synchronized (this) {
        // 再次读取
        op = cntx.fetch(name);

        // 如果未发现对象
        if (null == op) {
          try {
            if (log.isDebugEnabled())
              log.debug("\t >> Load definition");

            // 读取对象定义
            IocObject iobj = loader.load(createLoading(), name);
            if (null == iobj)
              throw Lang.makeThrow("Undefined object '%s'", name);

            // 修正对象类型
            if (null == iobj.getType())
              if (null == type)
                throw Lang.makeThrow("NULL TYPE object '%s'", name);
              else
                iobj.setType(type);

            // 检查对象级别
            if (Strings.isBlank(iobj.getScope()))
              iobj.setScope(defaultScope);

            // 根据对象定义,创建对象,maker 会自动的缓存对象到 context 中
            if (log.isDebugEnabled())
              log.debugf("\t >> Make...'%s'<%s>", name, type);
            op = maker.make(ing, iobj);
          }
          // 处理异常
          catch (ObjectLoadException e) {
            throw new IocException(e, "For object [%s] - type:[%s]", name, type);
          }
        }
      }
    }
    return (T) op.get(type, ing);
  }
View Full Code Here

    this.iobj = iobj;
  }

  public Object get(IocMaking ing) {
    IocMaking innering = ing.clone(null);
    ObjectProxy op = ing.getObjectMaker().make(innering, iobj);
    return op.get(iobj.getType(), innering);
  }
View Full Code Here

    Object re = req.getAttribute(name);
    if (re == null)
      return null;
    if (re instanceof ObjectProxy)
      return (ObjectProxy) re;
    return new ObjectProxy().setObj(re);
  }
View Full Code Here

    Object re = session.getAttribute(name);
    if (re == null)
      return null;
    if (re instanceof ObjectProxy)
      return (ObjectProxy) re;
    return new ObjectProxy().setObj(re);
  }
View Full Code Here

        // 创建对象创建时
        IocMaking ing = makeIocMaking(context, name);
        IocContext cntx = ing.getContext();

        // 从上下文缓存中获取对象代理
        ObjectProxy op = cntx.fetch(name);

        // 如果未发现对象
        if (null == op) {
            // 线程同步
            synchronized (lock_get) {
                // 再次读取
                op = cntx.fetch(name);

                // 如果未发现对象
                if (null == op) {
                    try {
                        if (log.isDebugEnabled())
                            log.debug("\t >> Load definition");

                        // 读取对象定义
                        IocObject iobj = loader.load(createLoading(), name);
                        if (null == iobj)
                            throw new IocException("Undefined object '%s'", name);

                        // 修正对象类型
                        if (null == iobj.getType())
                            if (null == type)
                                throw new IocException("NULL TYPE object '%s'", name);
                            else
                                iobj.setType(type);

                        // 检查对象级别
                        if (Strings.isBlank(iobj.getScope()))
                            iobj.setScope(defaultScope);

                        // 根据对象定义,创建对象,maker 会自动的缓存对象到 context 中
                        if (log.isDebugEnabled())
                            log.debugf("\t >> Make...'%s'<%s>", name, type);
                        op = maker.make(ing, iobj);
                    }
                    // 处理异常
                    catch (IocException e) {
                        throw e;
                    }
                    catch (Throwable e) {
                        throw new IocException(Lang.unwrapThrow(e), "For object [%s] - type:[%s]", name, type);
                    }
                }
            }
        }
        synchronized (lock_get) {
            return (T) op.get(type, ing);
        }
    }
View Full Code Here

        this.contexts = tmp.toArray(new IocContext[tmp.size()]);
    }

    public ObjectProxy fetch(String key) {
        for (IocContext c : contexts) {
            ObjectProxy re = c.fetch(key);
            if (null != re)
                return re;
        }
        return null;
    }
View Full Code Here

        IocEventSet iocEventSet = iobj.getEvents();

        // 建立对象代理,并保存在上下文环境中 只有对象为 singleton
        // 并且有一个非 null 的名称的时候才会保存
        // 就是说,所有内部对象,将会随这其所附属的对象来保存,而自己不会单独保存
        ObjectProxy op = new ObjectProxy();
        if (iobj.isSingleton() && null != ing.getObjectName())
            ing.getContext().save(iobj.getScope(), ing.getObjectName(), op);

        // 为对象代理设置触发事件
        if (null != iobj.getEvents()) {
            op.setFetch(createTrigger(mirror, iocEventSet.getFetch()));
            op.setDepose(createTrigger(mirror, iocEventSet.getDepose()));
        }

        try {
            // 准备对象的编织方式
            DefaultWeaver dw = new DefaultWeaver();
            op.setWeaver(dw);

            // 为编织器设置事件触发器:创建时
            if (null != iobj.getEvents()) {
                dw.setCreate(createTrigger(mirror, iocEventSet.getCreate()));
            }

            // 构造函数参数
            ValueProxy[] vps = new ValueProxy[Lang.length(iobj.getArgs())];
            for (int i = 0; i < vps.length; i++)
                vps[i] = ing.makeValue(iobj.getArgs()[i]);
            dw.setArgs(vps);

            // 先获取一遍,根据这个数组来获得构造函数
            Object[] args = new Object[vps.length];
            for (int i = 0; i < args.length; i++)
                args[i] = vps[i].get(ing);

            // 缓存构造函数
            dw.setBorning((Borning<?>) mirror.getBorning(args));

            // 如果这个对象是容器中的单例,那么就可以生成实例了
            // 这一步非常重要,它解除了字段互相引用的问题
            Object obj = null;
            if (iobj.isSingleton()) {
                obj = dw.born(ing);
                op.setObj(obj);
            }

            // 获得每个字段的注入方式
            FieldInjector[] fields = new FieldInjector[iobj.getFields().length];
            for (int i = 0; i < fields.length; i++) {
View Full Code Here

        Object re = session.getAttribute(name);
        if (re == null)
            return null;
        if (re instanceof ObjectProxy)
            return (ObjectProxy) re;
        return new ObjectProxy().setObj(re);
    }
View Full Code Here

TOP

Related Classes of org.nutz.ioc.ObjectProxy

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.