T
- the required bean typepublic interface Instance<T> extends java.lang.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:
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 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();
Provider.get()
,
Iterable.iterator()
,
AnnotationLiteral
,
TypeLiteral
Modifier and Type | Interface and Description |
---|---|
static interface |
Instance.Handle<T>
This interface represents a contextual reference handle.
|
Modifier and Type | Method and Description |
---|---|
void |
destroy(T instance)
When called, the container destroys the instance if the active context object for the scope type of the bean supports
destroying bean instances.
|
Instance.Handle<T> |
getHandle()
Obtains an initialized contextual reference handle for a bean that has the required type and qualifiers and is
eligible for injection.
|
java.lang.Iterable<? extends Instance.Handle<T>> |
handles()
Allows iterating over contextual reference handles for all beans that have the required type and required qualifiers and are eligible
for injection.
|
default java.util.stream.Stream<? extends Instance.Handle<T>> |
handlesStream()
Returns stream of
Instance.Handle objects. |
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. |
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. |
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. |
Instance<T> |
select(java.lang.annotation.Annotation... qualifiers)
Obtains a child
Instance for the given additional required qualifiers. |
<U extends T> |
select(java.lang.Class<U> subtype,
java.lang.annotation.Annotation... qualifiers)
Obtains a child
Instance for the given required type and additional required qualifiers. |
<U extends T> |
select(TypeLiteral<U> subtype,
java.lang.annotation.Annotation... qualifiers)
Obtains a child
Instance for the given required type and additional required qualifiers. |
default java.util.stream.Stream<T> |
stream()
When called, provides back a Stream of the beans available in this Instance.
|
Instance<T> select(java.lang.annotation.Annotation... qualifiers)
Obtains a child Instance
for the given additional required qualifiers.
qualifiers
- the additional required qualifiersInstance
java.lang.IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that
is not a qualifier typejava.lang.IllegalStateException
- if the container is already shutdown<U extends T> Instance<U> select(java.lang.Class<U> subtype, java.lang.annotation.Annotation... qualifiers)
Obtains a child Instance
for the given required type and additional required qualifiers.
U
- the required typesubtype
- a Class
representing the required typequalifiers
- the additional required qualifiersInstance
java.lang.IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that
is not a qualifier typejava.lang.IllegalStateException
- if the container is already shutdown<U extends T> Instance<U> select(TypeLiteral<U> subtype, java.lang.annotation.Annotation... qualifiers)
Obtains a child Instance
for the given required type and additional required qualifiers.
U
- the required typesubtype
- a TypeLiteral
representing the required typequalifiers
- the additional required qualifiersInstance
java.lang.IllegalArgumentException
- if passed two instances of the same non repeating qualifier type, or an instance of an annotation that
is not a qualifier typejava.lang.IllegalStateException
- if the container is already shutdowndefault java.util.stream.Stream<T> stream()
When called, provides back a Stream of the beans available in this Instance. If no beans are found, it returns an empty stream.
Stream
representing the beans associated with this Instance
objectboolean 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.
true
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, or false
otherwise.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.
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 parent Instance
was injected, or false
otherwise.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.
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 parent Instance
was injected, or false
otherwise.void destroy(T instance)
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.
instance
- the instance to destroyjava.lang.UnsupportedOperationException
- if the active context object for the scope type of the bean does not support
destroying bean instancesInstance.Handle<T> getHandle()
The contextual reference is obtained lazily, i.e. when first needed.
Instance.Handle
instnaceUnsatisfiedResolutionException
- if there is no bean with given type and qualifiersAmbiguousResolutionException
- if there is more than one bean given type and qualifiersjava.lang.Iterable<? extends Instance.Handle<T>> handles()
Note that the returned Iterable
is stateless. Therefore, each Iterable.iterator()
produces a new set of handles.
default java.util.stream.Stream<? extends Instance.Handle<T>> handlesStream()
Instance.Handle
objects.