パッケージ org.springframework.jndi

クラス JndiObjectFactoryBean

実装されたすべてのインターフェース:
AwareBeanClassLoaderAwareBeanFactoryAwareFactoryBean<ObjectSE>InitializingBean

public class JndiObjectFactoryBean extends JndiObjectLocator implements FactoryBean<ObjectSE>, BeanFactoryAware, BeanClassLoaderAware
JNDI オブジェクトを検索する FactoryBean。Bean 参照の JNDI にあるオブジェクトを公開します。DataSourceSE の場合、データアクセスオブジェクトの "dataSource" プロパティ。

一般的な使用箇所は、これをシングルトンファクトリとして(たとえば、特定の JNDI にバインドされた DataSource として)アプリケーションコンテキストに登録し、それを必要とするアプリケーションサービスへの参照を Bean に与えることです。

デフォルトの動作では、起動時に JNDI オブジェクトをルックアップしてキャッシュします。これは、下にある JndiObjectTargetSource を使用して、"lookupOnStartup" および "cache" プロパティでカスタマイズできます。実際の JNDI オブジェクト型は事前にわかっていないため、このようなシナリオでは "proxyInterface" を指定する必要があることに注意してください。

もちろん、Spring 環境の Bean クラスは、たとえば次のように検索できます。JNDI 自体からの DataSource。このクラスは、JNDI 名の中央構成を可能にし、非 JNDI 代替への切り替えを容易にします。後者は、テストセットアップ、スタンドアロンクライアントでの再利用などに特に便利です。

たとえば、DriverManagerDataSource は構成の問題です。この FactoryBean の定義を DriverManagerDataSource 定義に置き換えるだけです。

導入:
22.05.2003
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • JndiObjectFactoryBean

      public JndiObjectFactoryBean()
  • メソッドの詳細

    • setProxyInterface

      public void setProxyInterface(ClassSE<?> proxyInterface)
      JNDI オブジェクトに使用するプロキシインターフェースを指定します。

      通常、"lookupOnStartup" = false および / または "cache" = false と組み合わせて使用されます。遅延ルックアップの場合、実際の JNDI オブジェクト型は事前にわからないため、指定する必要があります。

      関連事項:
    • setProxyInterfaces

      public void setProxyInterfaces(ClassSE<?>... proxyInterfaces)
      JNDI オブジェクトに使用する複数のプロキシインターフェースを指定します。

      通常、"lookupOnStartup" = false および / または "cache" = false と組み合わせて使用されます。必要に応じて、指定された "expectedType" からプロキシインターフェースが自動検出されることに注意してください。

      関連事項:
    • setLookupOnStartup

      public void setLookupOnStartup(boolean lookupOnStartup)
      起動時に JNDI オブジェクトを検索するかどうかを設定します。デフォルトは "true" です。

      JNDI オブジェクトの遅い可用性を可能にするためにオフにすることができます。この場合、JNDI オブジェクトは最初のアクセスでフェッチされます。

      遅延検索の場合、プロキシインターフェースを指定する必要があります。

      関連事項:
    • setCache

      public void setCache(boolean cache)
      見つかった JNDI オブジェクトをキャッシュするかどうかを設定します。デフォルトは "true" です。

      JNDI オブジェクトのホット再デプロイメントを可能にするためにオフにすることができます。この場合、JNDI オブジェクトは呼び出しごとにフェッチされます。

      ホット再デプロイメントの場合、プロキシインターフェースを指定する必要があります。

      関連事項:
    • setExposeAccessContext

      public void setExposeAccessContext(boolean exposeAccessContext)
      ターゲットオブジェクトへのすべてのアクセス、つまり公開されたオブジェクト参照でのすべてのメソッド呼び出しについて、JNDI 環境コンテキストを公開するかどうかを設定します。

      デフォルトは "false" です。つまり、オブジェクトルックアップの JNDI コンテキストのみを公開します。認可要件を持つ JNDI 取得のファクトリ(JDBC DataSource、JMS ConnectionFactory など)の WebLogic で必要に応じて、各メソッド呼び出しの JNDI 環境(認可コンテキストを含む)を公開するには、このフラグを "true" に切り替えます。

    • setDefaultObject

      public void setDefaultObject(ObjectSE defaultObject)
      JNDI ルックアップが失敗した場合にフォールバックするデフォルトオブジェクトを指定します。デフォルトはなしです。

      これは、任意の Bean 参照またはリテラル値にすることができます。これは通常、JNDI 環境が特定の構成設定を定義する可能性があるが、それらが存在する必要がないシナリオで、リテラル値に使用されます。

      メモ: これは、起動時のルックアップでのみサポートされています。JndiObjectLocator.setExpectedType(java.lang.Class<?>) と一緒に指定する場合、指定した値はその型であるか、その型に変換可能である必要があります。

      関連事項:
    • setBeanFactory

      public void setBeanFactory(BeanFactory beanFactory)
      インターフェースからコピーされた説明: BeanFactoryAware
      所有ファクトリを Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanFactoryAwaresetBeanFactory 
      パラメーター:
      beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。
      関連事項:
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoaderSE classLoader)
      インターフェースからコピーされた説明: BeanClassLoaderAware
      Bean class loaderSE を Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定、ただし InitializingBean's InitializingBean.afterPropertiesSet() メソッドやカスタム init-method などの初期化コールバックの前に呼び出さます。

      次で指定:
      インターフェース BeanClassLoaderAwaresetBeanClassLoader 
      パラメーター:
      classLoader - 所有クラスローダー
    • afterPropertiesSet

      public void afterPropertiesSet() throws IllegalArgumentExceptionSE, NamingExceptionSE
      JNDI オブジェクトを検索して保存します。
      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      オーバーライド:
      クラス JndiObjectLocatorafterPropertiesSet 
      例外:
      IllegalArgumentExceptionSE
      NamingExceptionSE
    • lookupWithFallback

      protected ObjectSE lookupWithFallback() throws NamingExceptionSE
      ルックアップが失敗した場合に、指定された "defaultObject" (存在する場合)を返すルックアップバリアント。
      戻り値:
      見つかったオブジェクト、またはフォールバックとしての "defaultObject"
      例外:
      NamingExceptionSE - フォールバックなしでルックアップが失敗した場合
      関連事項:
    • getObject

      @Nullable public ObjectSE getObject()
      シングルトン JNDI オブジェクトを返します。
      次で指定:
      インターフェース FactoryBean<ObjectSE>getObject 
      戻り値:
      Bean のインスタンス (null にすることができます)
      関連事項:
    • getObjectType

      @Nullable public ClassSE<?> getObjectType()
      インターフェースからコピーされた説明: FactoryBean
      この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。

      これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。

      シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。

      このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。

      注意 : オートワイヤーは、ここで null を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。

      次で指定:
      インターフェース FactoryBean<ObjectSE>getObjectType 
      戻り値:
      この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は null 
      関連事項:
    • isSingleton

      public boolean isSingleton()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?

      注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject() から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true を返さないでください。

      FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。

      注意 false を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean インターフェースの実装は、SmartFactoryBean.isPrototype() メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean 実装は、isSingleton() 実装が false を返す場合、常に独立したインスタンスを返すと単純に想定されます。

      FactoryBean は通常シングルトンインスタンスを管理するため、デフォルトの実装は true を返します。

      次で指定:
      インターフェース FactoryBean<ObjectSE>isSingleton 
      戻り値:
      公開されたオブジェクトがシングルトンかどうか
      関連事項:
    • createCompositeInterface

      protected ClassSE<?> createCompositeInterface(ClassSE<?>[] interfaces)
      指定されたインターフェースの複合インターフェースクラスを作成し、指定されたインターフェースを 1 つの単一クラスに実装します。

      デフォルトの実装は、指定されたインターフェースの JDK プロキシクラスを構築します。

      パラメーター:
      interfaces - マージするインターフェース
      戻り値:
      クラスとしてマージされたインターフェース
      関連事項: