2.0.22 反映済み
S2Container.java
#code(Java)<<EOF package org.seasar.framework.container;
/**
* <p>コンポーネントを管理するDIコンテナのインターフェースです。</p> * <p>コンテナ自身も"container"という名前でコンポーネントとして * 登録されます。</p> * * @author higa */
public interface S2Container {
/** <p>S2コンテナ自身のコンポーネント名です。</p> */ public String NAME = "container";
/** * <p>キーを指定してコンポーネントを取得します。</p> * <p>キーが文字列の場合、一致するコンポーネント名を持つ * コンポーネントを取得します。<br> * キーがクラスまたはインターフェースの場合、<br * 「コンポーネント instanceof キー」<br> * を満たすコンポーネントを取得します。</p> * * @param componentKey コンポーネントを取得するためのキー * @return コンポーネント * @throws ComponentNotFoundRuntimeException コンポーネントが見つからない場合 * @throws TooManyRegistrationRuntimeException 同じ名前、または同じクラスに複数のコンポーネントが登録されている場合 * @throws CyclicReferenceRuntimeException constructor injectionでコンポーネントの参照が循環している場合 */ public Object getComponent(Object componentKey) throws ComponentNotFoundRuntimeException, TooManyRegistrationRuntimeException, CyclicReferenceRuntimeException;
/** * <p>外部コンポーネントにセッター・インジェクション、メソッド・イン * ジェクションを実行します。</p> * <p>外部コンポーネントのクラスをキーとしてコンポーネント定義を * 取得します。<br> * instanceモードが"outer"と定義されたコンポーネントのみ有効です。 * <br> * 「コンポーネント instanceof 外部コンポーネント.getClass()」<br> * を満たす外部コンポーネント定義を利用します。</p> * * @param outerComponent 外部コンポーネント * @throws ClassUnmatchRuntimeException 適合する外部コンポーネント定義が見つからない場合 */ public void injectDependency(Object outerComponent) throws ClassUnmatchRuntimeException;
/** * <p>外部コンポーネントにセッター・インジェクション、メソッド・ * インジェクションを実行します。</p> * <p>componentClassをキーとしてコンポーネント定義を取得します。<br> * instanceモードが"outer"と定義されたコンポーネントのみ有効です。 * <br> * 「コンポーネント instanceof 外部コンポーネント」<br> * を満たす外部コンポーネント定義を利用します。</p> * * @param outerComponent 外部コンポーネント * @param componentClass 外部コンポーネント定義のキー (クラス) * @throws ClassUnmatchRuntimeException 「外部コンポーネント instanceof 取得したコンポーネントのクラス」がfalseを返す場合 */ public void injectDependency(Object outerComponent, Class componentClass) throws ClassUnmatchRuntimeException;
/** * <p>外部コンポーネントにセッター・インジェクション、メソッド・イン * ジェクションを実行します。</p> * <p>componentClassをキーとしてコンポーネント定義を取得します。<br> * instanceモードが"outer"と定義されたコンポーネントのみ有効です。 * <br> * 「コンポーネント instanceof 外部コンポーネント」<br> * を満たす外部コンポーネント定義を利用します。</p> * * @param outerComponent 外部コンポーネント * @param componentName 外部コンポーネント定義のキー (名前) * @throws ClassUnmatchRuntimeException 「外部コンポーネント instanceof 取得したコンポーネントのクラス」がfalseを返す場合 */ public void injectDependency(Object outerComponent, String componentName) throws ClassUnmatchRuntimeException;
/** * <p>オブジェクトをコンポーネントとして登録します。</p> * <p>キーはオブジェクトのクラスになります。</p> * * @param component コンポーネントとして登録するオブジェクト */ public void register(Object component); /** * <p>オブジェクトを名前付きコンポーネントとして登録します。</p> * * @param component コンポーネントとして登録するオブジェクト * @param componentName コンポーネント名 */ public void register(Object component, String componentName);
/** * <p>クラスをコンポーネント定義として登録します。</p> * * @param componentClass コンポーネントのクラス */ public void register(Class componentClass);
/** * <p>クラスを名前付きコンポーネント定義として登録します。</p> * * @param componentClass コンポーネントのクラス * @param componentName コンポーネントの名前 */ public void register(Class componentClass, String componentName);
/** * <p>コンポーネント定義を登録します。</p> * * @param componentDef 登録するコンポーネント定義 */ public void register(ComponentDef componentDef);
/** * <p>コンポーネント定義の数を取得します。</p> * * @return コンポーネント定義の数 */ public int getComponentDefSize();
/** * <p>番号を指定してコンポーネント定義を取得します。</p> * * @param index 番号 * @return コンポーネント定義 */ public ComponentDef getComponentDef(int index);
/** * <p>指定したキーに対応するコンポーネント定義を取得します。</p> * * @param componentKey キー * @return コンポーネント定義 * @throws ComponentNotFoundRuntimeException コンポーネント定義が見つからない場合 */ public ComponentDef getComponentDef(Object componentKey) throws ComponentNotFoundRuntimeException;
/** * <p>指定したキーに対応するコンポーネント定義を持つどうか判定 * します。</p> * * @param componentKey キー * @return 存在するならtrue */ public boolean hasComponentDef(Object componentKey); /** * <p>rootのコンテナで、pathに対応するコンテナが既にロードされて * いるかを返します。</p> * * @param path パス * @return ロードされているならtrue */ public boolean hasDescendant(String path); /** * <p>rootのコンテナで、指定したパスに対応するロード済みの * コンテナを取得します。</p> * * @param path パス * @return コンテナ * @throws ContainerNotRegisteredRuntimeException コンテナが見つからない場合 */ public S2Container getDescendant(String path) throws ContainerNotRegisteredRuntimeException; /** * <p>rootのコンテナに、ロード済みのコンテナを登録します。</p> * * @param descendant ロード済みのコンテナ */ public void registerDescendant(S2Container descendant);
/** * <p>他のコンテナを子コンテナとしてincludeします。</p> * * @param child includeする子コンテナ */ public void include(S2Container child); /** * <p>子コンテナの数を取得します。</p> * * @return 子コンテナの数 */ public int getChildSize(); /** * <p>番号を指定して子コンテナを取得します。</p> * * @param index 子コンテナの番号 * @return 子コンテナ */ public S2Container getChild(int index);
/** * <p>コンテナを初期化します。</p> * <p>子コンテナを持つ場合、子コンテナを全て初期化した後、自分を * 初期化します。</p> */ public void init();
/** * <p>コンテナの終了処理をおこないます。</p> * <p>子コンテナを持つ場合、自分の終了処理を実行した後、 * 子コンテナ全ての終了処理を行います。</p> */ public void destroy(); /** * <p>名前空間を取得します。</p> * * @return 名前空間 */ public String getNamespace(); /** * <p>名前空間をセットします。</p> * * @param namespace セットする名前空間 */ public void setNamespace(String namespace); /** * <p>設定ファイルのパスを取得します。</p> * * @return 設定ファイルのパス */ public String getPath(); /** * <p>設定ファイルのパスをセットします。</p> * * @param path セットする設定ファイルのパス */ public void setPath(String path);
/** * <p>ルートのコンテナを取得します。</p> * * @return ルートのコンテナ */ public S2Container getRoot(); /** * <p>ルートのコンテナをセットします。</p> * * @param root セットするルートのコンテナ */ public void setRoot(S2Container root);
} EOF