Package org.nutz.ioc.impl

Source Code of org.nutz.ioc.impl.ComboContext

package org.nutz.ioc.impl;

import java.util.ArrayList;

import org.nutz.ioc.IocContext;
import org.nutz.ioc.ObjectProxy;

/**
* 组合了一组 IocContext。每当保存(save)时,会存入所有的Context。
* <p>
* 每当获取时 按照构造Context的顺序,依次获取。 只要有一个 Context 返回了非 null 对象,就立即返回
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class ComboContext implements IocContext {

  private IocContext[] contexts;

  /**
   * Context 的获取优先级,以数组的顺序来决定
   *
   * @param contexts
   */
  public ComboContext(IocContext... contexts) {
    ArrayList<IocContext> tmp = new ArrayList<IocContext>(contexts.length);
    for (IocContext iocContext : contexts) {
      if (tmp.contains(iocContext))
        continue;
      if (iocContext instanceof ComboContext){
        ComboContext comboContext = (ComboContext)iocContext;
        for (IocContext iocContext2 : comboContext.contexts) {
          if (tmp.contains(iocContext2))
            continue;
          tmp.add(iocContext2);
        }
      }
      else
        tmp.add(iocContext);
    }
    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;
  }

  public boolean save(String scope, String name, ObjectProxy obj) {
    boolean re = false;
    for (IocContext c : contexts)
      re &= c.save(scope, name, obj);
    return re;
  }

  public boolean remove(String scope, String name) {
    boolean re = false;
    for (IocContext c : contexts)
      re &= c.remove(scope, name);
    return re;
  }

  public void clear() {
    for (IocContext c : contexts)
      c.clear();
  }

  public void depose() {
    for (IocContext c : contexts)
      c.depose();
  }

  public IocContext[] getContexts() {
    return contexts;
  }
}
TOP

Related Classes of org.nutz.ioc.impl.ComboContext

TOP
Copyright © 2018 www.massapi.com. 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.