Class DiContainer

java.lang.Object
nablarch.core.repository.di.DiContainer
All Implemented Interfaces:
ObjectLoader

@Published(tag="architect") public class DiContainer extends Object implements ObjectLoader
DIコンテナの機能を実現するクラス。 staticプロパティへのインジェクションは行われない。 インジェクションの対象となるプロパティがstaticである場合、例外が発生する。 後方互換性を維持するするため、システムプロパティ"nablarch.diContainer.allowStaticInjection"に trueを設定することで、staticプロパティへのインジェクションを許可できる。 後方互換性維持以外の目的での使用は推奨しない。
Author:
Koichi Asano
  • Constructor Details

    • DiContainer

      public DiContainer(ComponentDefinitionLoader loader)
      コンストラクタ。
      Parameters:
      loader - コンポーネント定義のローダ
    • DiContainer

      public DiContainer(ComponentDefinitionLoader loader, boolean allowStaticInjection)
      コンストラクタ。
      Parameters:
      loader - コンポーネント定義のローダ
      allowStaticInjection - staticプロパティへのインジェクションを許容するかどうか
  • Method Details

    • loadExternalizedComponentDefinitionLoader

      protected ExternalizedComponentDefinitionLoader loadExternalizedComponentDefinitionLoader()
      ExternalizedComponentDefinitionLoaderServiceLoaderを使って読み込む。

      ExternalizedComponentDefinitionLoaderのサービスプロバイダが設定されていない場合は、 後方互換を維持するためにSystemPropertyExternalizedLoaderが使用されます。

      Returns:
      ロードされた ExternalizedComponentDefinitionLoader
    • load

      public Map<String,Object> load()
      DIしたオブジェクトを取得するロードメソッド。
      Specified by:
      load in interface ObjectLoader
      Returns:
      名前をキーにしてロードしたオブジェクトを保持するMap。
      See Also:
    • generateId

      public int generateId()
      コンポーネントIDの最大値を取得する。
      Returns:
      コンポーネントIDの最大値
    • reload

      public void reload()
      コンテナの保持するオブジェクトの再生成を行う。
      オブジェクトの再生成は下記順序で行う。
      1. 設定の読み込み
      2. コンポーネント定義の登録
      3. コンポーネント定義にあるObjectLoaderの生成とObjectLoader内のコンポーネントのロード
      4. システムプロパティによるコンポーネント定義の上書き
      5. コンポーネントの生成
      6. コンポーネントに対するインジェクションの実行
      7. 初期化対象クラスの初期化実行
    • getComponentById

      public Object getComponentById(int id)
      コンポーネントIDをキーにコンポーネントを取得する。
      Parameters:
      id - コンポーネントID
      Returns:
      コンポーネント
    • getComponentByName

      public <T> T getComponentByName(String name)
      コンポーネント名をキーにコンポーネントを取得する。
      Type Parameters:
      T - コンポーネントの型
      Parameters:
      name - コンポーネント名
      Returns:
      コンポーネント
    • getComponentByType

      public <T> T getComponentByType(Class<T> type)
      コンポーネントの型をキーにコンポーネントを取得する。
      Type Parameters:
      T - コンポーネントの型
      Parameters:
      type - コンポーネントの型
      Returns:
      コンポーネント