Module jakarta.cdi

Interface Instance<T>

Type Parameters:
T - the required bean type
All Superinterfaces:
Iterable<T>, Provider<T>
All Known Subinterfaces:
SeContainer
All Known Implementing Classes:
CDI

public interface Instance<T> extends Iterable<T>, Provider<T>

Allows the application to dynamically obtain instances of beans with a specified combination of required type and qualifiers.

In certain situations, injection is not the most convenient way to obtain a contextual reference. For example, it may not be used when:

  • the bean type or qualifiers vary dynamically at runtime, or
  • depending upon the deployment, there may be no bean which satisfies the type and qualifiers, or
  • we would like to iterate over all beans of a certain type.

In these situations, an instance of the Instance may be injected:

 @Inject
 Instance<PaymentProcessor> paymentProcessor;
 

Any combination of qualifiers may be specified at the injection point:

 @Inject
 @PayBy(CHEQUE)
 Instance<PaymentProcessor> chequePaymentProcessor;
 

Or, the @Any qualifier may be used, allowing the application to specify qualifiers dynamically:

 @Inject
 @Any
 Instance<PaymentProcessor> anyPaymentProcessor;
 

For an injected Instance:

  • the required type is the type parameter specified at the injection point, and
  • the required qualifiers are the qualifiers specified at the injection point.

The inherited Provider.get() method returns a contextual references for the unique bean that matches the required type and required qualifiers and is eligible for injection into the class into which the parent Instance was injected, or throws an UnsatisfiedResolutionException or AmbiguousResolutionException.

 PaymentProcessor pp = chequePaymentProcessor.get();
 

The inherited Iterable.iterator() method returns an iterator over contextual references for beans that match the required type and required qualifiers and are eligible for injection into the class into which the parent Instance was injected.

 for (PaymentProcessor pp : anyPaymentProcessor)
     pp.test();
 
See Also: