Package org.eclipse.sisu.inject
Dynamic bean lookup across multiple injectors.
The BeanLocator lets you lookup and keep watch for bean implementations;
it does this by processing binding information from one or more BindingPublishers, such as injectors.
You can add or remove BindingPublishers using the MutableBeanLocator
view; any existing watchers or returned collections are updated to reflect the latest binding information.
DefaultBeanLocator will automatically add any injectors it's bound in by virtue
of an injected setter. This makes it easy to share across multiple injectors with a simple instance binding:
Module locatorModule = new AbstractModule() {
private final DefaultBeanLocator locator = new DefaultBeanLocator();
@Override protected void configure() {
bind( DefaultBeanLocator.class ).toInstance( locator );
}
};
Injector injectorA = Guice.createInjector( new WireModule( locatorModule, spaceModuleA ) ); // adds injectorA to locator
Injector injectorB = Guice.createInjector( new WireModule( locatorModule, spaceModuleB ) ); // adds injectorB to locator
If you want to use a DefaultBeanLocator in a given injector, but don't want that injector
added automatically, wrap the locator inside a provider to hide the injected setter from Guice:
bind( DefaultBeanLocator.class ).toProvider( Providers.of( locator ) );By default all bindings in an injector are separated into two partitions (default vs non-default) and ranked according to their sequence number. This is so bindings from multiple injectors can be interleaved to keep default components prioritized before non-default, while still maintaining an overall ordering between injectors. To override the default bind your own
RankingFunction:
bind( RankingFunction.class ).to( MyRankingFunction.class );
-
Interface Summary Interface Description AnnotatedSource Binding source locations can implement this interface to supply annotations to theBeanLocator.BeanLocator Finds and tracks bean implementations annotated withQualifierannotations.BindingPublisher Publisher ofBindings to interestedBindingSubscribers.BindingSubscriber<T> Subscriber ofBindings from one or moreBindingPublishers.DeferredClass<T> PlaceholderClass; postpones classloading until absolutely necessary.DeferredProvider<T> Providerbacked by aDeferredClass.Logs.Sink Something that accepts formatted messages.MildElements.Indexable Represents an element that can be indexed.MildValues.InverseMapping Represents an inverse mapping from a value to its key.MutableBeanLocator MutableBeanLocatorthat finds and tracks bindings across zero or moreBindingPublishers.RankingFunction Assigns eachBindinga rank according to some function; higher ranks take precedence over lower ranks. -
Class Summary Class Description BeanCache<Q extends java.lang.annotation.Annotation,T> Atomic cache mappingBindings toBeanEntrys; optimized for common case of single entries.DefaultBeanLocator DefaultMutableBeanLocatorthat locates qualified beans across a dynamic group ofBindingPublishers.DefaultRankingFunction SimpleRankingFunctionthat partitions qualified bindings into two main groups.DescriptionSource Implementation of @Descriptionthat can also act as an @AnnotatedSource.Guice4 Utility methods for dealing with changes in the Guice 4.0 SPI.HiddenSource Implementation of @Hiddenthat can also act as an @AnnotatedSource.Implementations Utility methods for discovering the implementations behind Guice bindings.Implementations.ClassFinder BindingTargetVisitorthat attempts to find the implementations behind bindings.ImplicitBindings Source of "implicit" bindings; includes @ImplementedBy, @ProvidedBy, and concrete types.InjectorBindings LazyBeanEntry<Q extends java.lang.annotation.Annotation,T> LazyBeanEntrybacked by a qualifiedBindingand an assigned rank.LazyBeanEntry.JsrNamed Implementation of @Namedthat can also act like @Named.Legacy<S> Deprecated. Limited support for migrating legacy types.LocatedBeans<Q extends java.lang.annotation.Annotation,T> Provides a sequence ofBeanEntrys by iterating over qualifiedBindings.Logs Utility methods for dealing with container logging and recovery.Logs.ConsoleSink Logs.Sinks messages to the system console.Logs.JULSink Logs.Sinks messages to the JDK.Logs.SLF4JSink Logs.Sinks messages via SLF4J.MildConcurrentKeys<K,V> Thread-safeMapwhose keys are kept alive by soft/weakReferences.MildConcurrentValues<K,V> Thread-safeMapwhose values are kept alive by soft/weakReferences.MildElements<T> NON-thread-safeCollectionof elements kept alive by soft/weakReferences.MildElements.Soft<T> SoftMildElements.Indexableelement.MildElements.Weak<T> WeakMildElements.Indexableelement.MildKeys<K,V> NON-thread-safeMapwhose keys are kept alive by soft/weakReferences.MildKeys.Soft<T> Soft key that maintains a constant hash and uses referential equality.MildKeys.Weak<T> Weak key that maintains a constant hash and uses referential equality.MildValues<K,V> NON-thread-safeMapwhose values are kept alive by soft/weakReferences.MildValues.Soft<K,V> Soft value with anMildValues.InverseMappingback to its key.MildValues.Weak<K,V> Weak value with anMildValues.InverseMappingback to its key.PrioritySource Implementation of @Prioritythat can also act as an @AnnotatedSource.RankedBindings<T> Ordered sequence ofBindings of a given type; subscribes toBindingPublishers on demand.RankedSequence<T> OrderedListthat arranges elements by descending rank; supports concurrent iteration and modification.RankedSequence.Content Represents an immutable snapshot of ranked elements.Soft Utility methods for dealing withSoftReferencecollections.Sources Utility methods for dealing with annotated sources.TypeArguments Utility methods for dealing with generic type arguments.WatchedBeans<Q extends java.lang.annotation.Annotation,T,W> Provides dynamicBeanEntrynotifications by tracking qualifiedBindings.Weak Utility methods for dealing withWeakReferencecollections. -
Enum Summary Enum Description QualifyingStrategy Enumerates the different strategies for qualifyingBindings against requirementKeys. -
Annotation Types Summary Annotation Type Description TypeArguments.Implicit Qualifierof bindings that should be treated as implicit.