Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2010, Red Hat, Inc., and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package javax.enterprise.inject;
 
 

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 &.064;Any qualifier may be used, allowing the application to specify qualifiers dynamically:

 @Inject
 @Any
 Instance<PaymentProcessor> anyPaymentProcessor;
 

Finally, the &.064;New qualifier may be used, allowing the application to obtain a &.064;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 javax.inject.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 java.lang.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();
 

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

    

Obtains a child Instance for the given additional required qualifiers.

Parameters:
qualifiers the additional required qualifiers
Returns:
the child Instance
Throws:
java.lang.IllegalArgumentException if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type
    public Instance<T> select(Annotation... qualifiers);

    

Obtains a child Instance for the given required type and additional required qualifiers.

Parameters:
<U> the required type
subtype a java.lang.Class representing the required type
qualifiers the additional required qualifiers
Returns:
the child Instance
Throws:
java.lang.IllegalArgumentException if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type
    public <U extends T> Instance<U> select(Class<U> subtypeAnnotation... qualifiers);

    

Obtains a child Instance for the given required type and additional required qualifiers.

Parameters:
<U> the required type
subtype a javax.enterprise.util.TypeLiteral representing the required type
qualifiers the additional required qualifiers
Returns:
the child Instance
Throws:
java.lang.IllegalArgumentException if passed two instances of the same qualifier type, or an instance of an annotation that is not a qualifier type
    public <U extends T> Instance<U> select(TypeLiteral<U> subtypeAnnotation... qualifiers);

    

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 parent Instance was injected, or false otherwise.
    public boolean isUnsatisfied();

    

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 parent Instance was injected, or false otherwise.
    public boolean isAmbiguous();

    

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, or the client proxy for a normal scoped bean instance.

Parameters:
instance the instance to destroy
Throws:
java.lang.UnsupportedOperationException if the active context object for the scope type of the bean does not support destroying bean instances
Since:
1.1
    public void destroy(T instance);
New to GrepCode? Check out our FAQ X