Interface WeldInstance<T>

  • Type Parameters:
    T - the required bean type
    All Superinterfaces:
    jakarta.enterprise.inject.Instance<T>, Iterable<T>, jakarta.inject.Provider<T>

    public interface WeldInstance<T>
    extends jakarta.enterprise.inject.Instance<T>
    Represents an enhanced version of Instance.

    In the following example we filter out beans which are not Dependent then sort the beans by priority and use the handler whose bean has the highest priority (according to getPriorityComparator()) to obtain the hello string. Note that contextual references for beans with lower priority are not created at all.

     @ApplicationScoped
     class Hello {
    
         @Inject
         WeldInstance<HelloProvider> instance;
    
         String hello() {
             HelloProvider helloProvider = instance.handlersStream().filter(h -> h.getBean().getScope().equals(Dependent.class))
                     .sorted(instance.getPriorityComparator()).findFirst().map(Handler::get).orElse(null);
             if (helloProvider != null)
                 return helloProvider.getHello();
             return "No hello provider found!";
         }
     }
     
    Author:
    Martin Kouba
    See Also:
    WELD-2204
    • Method Detail

      • getHandler

        @Deprecated
        WeldInstance.Handler<T> getHandler()
        Deprecated.
        This method is deprecated as a similar functioning method exists in CDI 4.0 and newer. Users should instead use Instance.getHandle(). Obtains an initialized contextual reference handler for the bean that has the required type and required qualifiers and is eligible for injection.

        The contextual reference is obtained lazily, i.e. when first needed.

        Returns:
        a new handler
        Throws:
        jakarta.enterprise.inject.UnsatisfiedResolutionException - if there is no bean with given type and qualifiers
        jakarta.enterprise.inject.AmbiguousResolutionException - if there is more than one bean given type and qualifiers
      • handlers

        @Deprecated
        Iterable<WeldInstance.Handler<T>> handlers()
        Deprecated.
        This method is deprecated as a similar functioning method exists in CDI 4.0 and newer. Users should instead use Instance.handles(). Allows to iterate over contextual reference handlers for all the beans that have the required type and required qualifiers and are eligible for injection.

        Note that the returned Iterable is stateless and so each Iterable.iterator() produces a new set of handlers.

        Returns:
        a new iterable
      • handlersStream

        @Deprecated
        default Stream<? extends WeldInstance.Handler<T>> handlersStream()
        Deprecated.
        This method is deprecated as a similar functioning method exists in CDI 4.0 and newer. Users should instead use Instance.handlesStream().
        Returns:
        a new stream of contextual reference handlers
      • getPriorityComparator

        @Deprecated
        Comparator<WeldInstance.Handler<?>> getPriorityComparator()
        Deprecated.
        This method is deprecated in favor of getHandlePriorityComparator() which operates on a non-deprecated Instance.Handle interface. The returned comparator sorts handlers by priority in descending order.
        • A class-based bean whose annotated type has jakarta.annotation.Priority has the priority of value jakarta.annotation.Priority#value()
        • A custom bean which implements Prioritized has the priority of value Prioritized.getPriority()
        • Any other bean has the priority of value 0
        Returns:
        a comparator instance
      • getHandlePriorityComparator

        Comparator<jakarta.enterprise.inject.Instance.Handle<?>> getHandlePriorityComparator()
        The returned comparator sorts handles by priority in descending order.
        • A class-based bean whose annotated type has jakarta.annotation.Priority has the priority of value jakarta.annotation.Priority#value()
        • A custom bean which implements Prioritized has the priority of value Prioritized.getPriority()
        • Any other bean has the priority of value 0
        Returns:
        a comparator instance
      • select

        WeldInstance<T> select​(Annotation... qualifiers)
        Specified by:
        select in interface jakarta.enterprise.inject.Instance<T>
      • select

        <U extends TWeldInstance<U> select​(Class<U> subtype,
                                             Annotation... qualifiers)
        Specified by:
        select in interface jakarta.enterprise.inject.Instance<T>
      • select

        <U extends TWeldInstance<U> select​(jakarta.enterprise.util.TypeLiteral<U> subtype,
                                             Annotation... qualifiers)
        Specified by:
        select in interface jakarta.enterprise.inject.Instance<T>
      • select

        <X> WeldInstance<X> select​(Type subtype,
                                   Annotation... qualifiers)

        Obtains a child Instance for the given required type and additional required qualifiers. Must be invoked on Instance<T> where T is Object.

        Type Parameters:
        X - the required type
        Parameters:
        subtype - a Type representing the required type
        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 type
        IllegalStateException - if the container is already shutdown
        IllegalStateException - if invoked on Instance<T> where T is of any other type than Object