インターフェース Instance<T>
- 型パラメーター:
T
- 必要な Bean 型
- すべてのスーパーインターフェース:
IterableSE<T>
,Provider<T>
- すべての既知のサブインターフェース:
SeContainer
- すべての既知の実装クラス:
CDI
public interface Instance<T> extends IterableSE<T>, Provider<T>
アプリケーションが、必要な型と修飾子の指定された組み合わせで Bean のインスタンスを動的に取得できるようにします。
特定の状況では、インジェクションはコンテキスト参照を取得するための最も便利な方法ではありません。例: 次の場合は使用できません。
- Bean 型または修飾子が実行時に動的に変化する、または
- デプロイによっては、型と修飾子を満たす Bean がない場合があります。
- 特定の型のすべての Bean を反復処理します。
これらの状況では、
Instance
のインスタンスが注入される可能性があります。@Inject Instance<PaymentProcessor> paymentProcessor;
修飾子の任意の組み合わせをインジェクションポイントで指定できます。
@Inject @PayBy(CHEQUE) Instance<PaymentProcessor> chequePaymentProcessor;
または、
@Any
修飾子を使用して、アプリケーションで修飾子を動的に指定できます。@Inject @Any Instance<PaymentProcessor> anyPaymentProcessor;
注入された
Instance
の場合:- 必要な型は、インジェクションポイントで指定された型パラメーター
- 必要な修飾子は、インジェクションポイントで指定された修飾子です。
継承された
Provider.get()
メソッドは、必要な型と必要な修飾子に一致し、親Instance
が注入されたクラスへの注入に適格であるか、UnsatisfiedResolutionException
またはAmbiguousResolutionException
をスローする一意の Bean のコンテキスト参照を返します。PaymentProcessor pp = chequePaymentProcessor.get();
継承された
Iterable.iterator()
メソッドは、必要な型と必要な修飾子に一致し、親Instance
が注入されたクラスへの注入に適格な Bean のコンテキスト参照に対するイテレーターを返します。for (PaymentProcessor pp : anyPaymentProcessor) pp.test();
- 作成者:
- Gavin King, John Ament, Martin Kouba
- 関連事項:
Provider.get()
,Iterable.iterator()
,AnnotationLiteral
,TypeLiteral
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 インターフェース 説明 static interface
Instance.Handle<T>
このインターフェースは、コンテキスト参照ハンドルを表します。
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド デフォルトメソッド 修飾子と型 メソッド 説明 void
destroy(T instance)
呼び出されると、Bean のスコープ型のアクティブコンテキストオブジェクトが Bean インスタンスの破棄をサポートしている場合、コンテナーはインスタンスを破棄します。Instance.Handle<T>
getHandle()
必要な型と修飾子を持ち、インジェクションに適格な Bean の初期化されたコンテキスト参照ハンドルを取得します。IterableSE<? extends Instance.Handle<T>>
handles()
必要な型と必要な修飾子を持ち、インジェクションの対象となるすべての Bean のコンテキスト参照ハンドルを反復処理できます。default StreamSE<? extends Instance.Handle<T>>
handlesStream()
Instance.Handle
オブジェクトのストリームを返します。boolean
isAmbiguous()
必要な型と修飾子に一致し、親Instance
が注入されたクラスへの注入に適格な Bean が複数あるかどうかを判別します。default boolean
isResolvable()
必要な型と修飾子に一致し、親Instance
が注入されたクラスへの注入に適格な Bean が 1 つだけあるかどうかを判別します。boolean
isUnsatisfied()
必要な型と修飾子に一致し、親Instance
が注入されたクラスへの注入に適格な Bean がないかどうかを判別します。<U extends T>
Instance<U>select(TypeLiteral<U> subtype, AnnotationSE... qualifiers)
指定された必須型および追加の必須修飾子の子Instance
を取得します。Instance<T>
select(AnnotationSE... qualifiers)
指定された追加の必須修飾子の子Instance
を取得します。<U extends T>
Instance<U>select(ClassSE<U> subtype, AnnotationSE... qualifiers)
指定された必須型および追加の必須修飾子の子Instance
を取得します。default StreamSE<T>
stream()
呼び出されると、このインスタンスで使用可能な Bean のストリームを返します。インターフェース java.lang.IterableSE から継承されたメソッド
forEachSE, iterator, spliterator
メソッドの詳細
select
Instance<T> select(AnnotationSE... qualifiers)
指定された追加の必須修飾子の子
Instance
を取得します。- パラメーター:
qualifiers
- 追加で必要な修飾子- 戻り値:
- 子
Instance
- 例外:
IllegalArgumentExceptionSE
- 同じ非反復修飾子型の 2 つのインスタンス、または修飾子型ではないアノテーションのインスタンスが渡された場合IllegalStateExceptionSE
- コンテナーがすでにシャットダウンされている場合
select
<U extends T> Instance<U> select(ClassSE<U> subtype, AnnotationSE... qualifiers)
指定された必須型および追加の必須修飾子の子
Instance
を取得します。- 型パラメーター:
U
- 必要な型- パラメーター:
subtype
- 必要な型を表すClass
SEqualifiers
- 追加で必要な修飾子- 戻り値:
- 子
Instance
- 例外:
IllegalArgumentExceptionSE
- 同じ非反復修飾子型の 2 つのインスタンス、または修飾子型ではないアノテーションのインスタンスが渡された場合IllegalStateExceptionSE
- コンテナーがすでにシャットダウンされている場合
select
<U extends T> Instance<U> select(TypeLiteral<U> subtype, AnnotationSE... qualifiers)
指定された必須型および追加の必須修飾子の子
Instance
を取得します。- 型パラメーター:
U
- 必要な型- パラメーター:
subtype
- 必要な型を表すTypeLiteral
qualifiers
- 追加で必要な修飾子- 戻り値:
- 子
Instance
- 例外:
IllegalArgumentExceptionSE
- 同じ非反復修飾子型の 2 つのインスタンス、または修飾子型ではないアノテーションのインスタンスが渡された場合IllegalStateExceptionSE
- コンテナーがすでにシャットダウンされている場合
stream
default StreamSE<T> stream()
呼び出されると、このインスタンスで使用可能な Bean のストリームを提供します。Bean が見つからない場合は、空のストリームを返します。
- 戻り値:
- この
Instance
オブジェクトに関連付けられた Bean を表すStream
- 導入:
- 2.0
isUnsatisfied
boolean isUnsatisfied()
必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean がないかどうかを判別します。- 戻り値:
- 必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean がない場合はtrue
、それ以外の場合はfalse
。
isAmbiguous
boolean isAmbiguous()
必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean が複数あるかどうかを判別します。- 戻り値:
- 必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean が複数ある場合はtrue
、それ以外の場合はfalse
。
isResolvable
default boolean isResolvable()
必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean が 1 つだけあるかどうかを判別します。- 戻り値:
- 必要な型と修飾子に一致し、親
Instance
が注入されたクラスへの注入に適格な Bean が 1 つだけある場合はtrue
、それ以外の場合はfalse
。 - 導入:
- 2.0
destroy
void destroy(T instance)
呼び出されると、Bean のスコープ型のアクティブなコンテキストオブジェクトが Bean インスタンスの破棄をサポートしている場合、コンテナーはインスタンスを破棄します。すべての通常のスコープの組み込みコンテキストは、Bean インスタンスの破棄をサポートします。
渡されるインスタンスは、同じ
Instance
オブジェクトから取得された依存スコープの Bean インスタンスか、通常のスコープの Bean インスタンスのクライアントプロキシのいずれかである必要があります。- パラメーター:
instance
- 破棄するインスタンス- 例外:
UnsupportedOperationExceptionSE
- Bean のスコープ型のアクティブコンテキストオブジェクトが Bean インスタンスの破棄をサポートしていない場合- 導入:
- 1.1
getHandle
Instance.Handle<T> getHandle()
必要な型と修飾子を持ち、インジェクションに適格な Bean の初期化されたコンテキスト参照ハンドルを取得します。そのような Bean がない場合、または複数存在する場合は、例外をスローします。コンテキスト参照は遅延して取得されます。つまり、最初に必要になったときに取得されます。
- 戻り値:
- 新しい
Instance.Handle
インスタンス - 例外:
UnsatisfiedResolutionException
- 指定された型と修飾子を持つ Bean がない場合AmbiguousResolutionException
- 型と修飾子が指定された Bean が複数ある場合
handles
IterableSE<? extends Instance.Handle<T>> handles()
必要な型と必要な修飾子を持ち、インジェクションの対象となるすべての Bean のコンテキスト参照ハンドルを反復処理できます。返された
Iterable
SE はステートレスであることに注意してください。Iterable.iterator()
ごとに新しいハンドルセットが生成されます。- 戻り値:
- 新しいイテラブル
handlesStream
default StreamSE<? extends Instance.Handle<T>> handlesStream()
Instance.Handle
オブジェクトのストリームを返します。- 戻り値:
- コンテキスト参照ハンドルの新しいストリーム