Interface Instance<T>
- Type Parameters:
T
- the required bean type
- All Known Subinterfaces:
SeContainer
- All Known Implementing Classes:
CDI
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;
Finally, the @New
qualifier may be used, allowing the application to obtain a
@New
qualified bean:
@Inject @New(ChequePaymentProcessor.class) Instance<PaymentProcessor> chequePaymentProcessor;
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();
-
Method Summary
Modifier and TypeMethodDescriptionvoid
When called, the container destroys the instance if the active context object for the scope type of the bean supports destroying bean instances.boolean
Determines if there is more than one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected.default boolean
Determines if there is exactly one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected.boolean
Determines if there is no bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected.select
(TypeLiteral<U> subtype, Annotation... qualifiers) Obtains a childInstance
for the given required type and additional required qualifiers.select
(Annotation... qualifiers) Obtains a childInstance
for the given additional required qualifiers.select
(Class<U> subtype, Annotation... qualifiers) Obtains a childInstance
for the given required type and additional required qualifiers.stream()
When called, provides back a Stream of the beans available in this Instance.Methods inherited from interface java.lang.Iterable
forEach, iterator, spliterator
-
Method Details
-
select
Obtains a child
Instance
for the given additional required qualifiers.- Parameters:
qualifiers
- the additional required qualifiers- Returns:
- the child
Instance
- Throws:
IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that is not a qualifier typeIllegalStateException
- if the container is already shutdown
-
select
Obtains a child
Instance
for the given required type and additional required qualifiers.- Type Parameters:
U
- the required type- Parameters:
subtype
- aClass
representing the required typequalifiers
- the additional required qualifiers- Returns:
- the child
Instance
- Throws:
IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that is not a qualifier typeIllegalStateException
- if the container is already shutdown
-
select
Obtains a child
Instance
for the given required type and additional required qualifiers.- Type Parameters:
U
- the required type- Parameters:
subtype
- aTypeLiteral
representing the required typequalifiers
- the additional required qualifiers- Returns:
- the child
Instance
- Throws:
IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that is not a qualifier typeIllegalStateException
- if the container is already shutdown
-
stream
When called, provides back a Stream of the beans available in this Instance. If no beans are found, it returns an empty stream.
- Returns:
- a
Stream
representing the beans associated with thisInstance
object - Since:
- 2.0
-
isUnsatisfied
boolean isUnsatisfied()Determines if there is no bean that matches the required type and qualifiers and is eligible for injection into the class into which the parent
Instance
was injected.- Returns:
true
if there is no bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected, orfalse
otherwise.
-
isAmbiguous
boolean isAmbiguous()Determines if there is more than one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parent
Instance
was injected.- Returns:
true
if there is more than one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected, orfalse
otherwise.
-
isResolvable
default boolean isResolvable()Determines if there is exactly one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parent
Instance
was injected.- Returns:
true
if there is exactly one bean that matches the required type and qualifiers and is eligible for injection into the class into which the parentInstance
was injected, orfalse
otherwise.- Since:
- 2.0
-
destroy
When called, the container destroys the instance if the active context object for the scope type of the bean supports destroying bean instances. All normal scoped built-in contexts support destroying bean instances.
The instance passed should either be a dependent scoped bean instance obtained from the same
Instance
object, or the client proxy for a normal scoped bean instance.- Parameters:
instance
- the instance to destroy- Throws:
UnsupportedOperationException
- if the active context object for the scope type of the bean does not support destroying bean instances- Since:
- 1.1
-