org.glassfish.hk2.utilities.binding
Class AbstractBinder

java.lang.Object
  extended by org.glassfish.hk2.utilities.binding.AbstractBinder
All Implemented Interfaces:
DynamicConfiguration, Binder

public abstract class AbstractBinder
extends java.lang.Object
implements Binder, DynamicConfiguration

Skeleton implementation of injection binder with convenience methods for binding definitions.

Author:
Marek Potociar (marek.potociar at oracle.com)

Constructor Summary
AbstractBinder()
           
 
Method Summary
<T> ActiveDescriptor<T>
addActiveDescriptor(ActiveDescriptor<T> activeDescriptor)
          This allows third party systems to add reified active descriptors to the system.
<T> ActiveDescriptor<T>
addActiveDescriptor(java.lang.Class<T> rawClass)
          This adds an active descriptor to the system based completely on the analysis of the given class.
 void addUnbindFilter(Filter unbindFilter)
          This filter will added to the list of filters in this Configuration that will determine which Descriptors will be removed from the system.
<T> ServiceBindingBuilder<T>
bind(java.lang.Class<T> serviceType)
          Start building a new class-based service binding.
<T> ActiveDescriptor<T>
bind(Descriptor descriptor)
          This method will bind the given descriptor to this Module.
 void bind(DynamicConfiguration configuration)
          This method will be called by the ServiceLocatorUtilities.bind(org.glassfish.hk2.api.ServiceLocator, Binder...) method for each binder given.
 FactoryDescriptors bind(FactoryDescriptors factoryDescriptors)
          This method will bind the descriptors found in the FactoryDescriptors.
<T> ScopedBindingBuilder<T>
bind(T service)
          Start building a new instance-based service binding.
<T> ServiceBindingBuilder<T>
bindAsContract(java.lang.Class<T> serviceType)
          Start building a new class-based service binding.
<T> ServiceBindingBuilder<T>
bindAsContract(TypeLiteral<T> serviceType)
          Start building a new generic type-based service binding.
<T> ServiceBindingBuilder<T>
bindFactory(java.lang.Class<? extends Factory<T>> factoryType)
          Start building a new factory class-based service binding.
<T> ServiceBindingBuilder<T>
bindFactory(java.lang.Class<? extends Factory<T>> factoryType, java.lang.Class<? extends java.lang.annotation.Annotation> factoryScope)
          Start building a new factory class-based service binding.
<T> ServiceBindingBuilder<T>
bindFactory(Factory<T> factory)
          Start building a new factory instance-based service binding.
 void commit()
          This causes the configuration to get committed.
protected abstract  void configure()
          Implement to provide binding definitions using the exposed binding methods.
 void install(Binder... binders)
          Adds all binding definitions from the binders to the binding configuration.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractBinder

public AbstractBinder()
Method Detail

bind

public <T> ServiceBindingBuilder<T> bind(java.lang.Class<T> serviceType)
Start building a new class-based service binding. Does NOT bind the service type itself as a contract type.

Type Parameters:
T - service type.
Parameters:
serviceType - service class.
Returns:
initialized binding builder.

bindAsContract

public <T> ServiceBindingBuilder<T> bindAsContract(java.lang.Class<T> serviceType)
Start building a new class-based service binding. Binds the service type itself as a contract type.

Type Parameters:
T - service type.
Parameters:
serviceType - service class.
Returns:
initialized binding builder.

bindAsContract

public <T> ServiceBindingBuilder<T> bindAsContract(TypeLiteral<T> serviceType)
Start building a new generic type-based service binding. Binds the generic service type itself as a contract type.

Type Parameters:
T - service type.
Parameters:
serviceType - generic service type information.
Returns:
initialized binding builder.

bind

public <T> ScopedBindingBuilder<T> bind(T service)
Start building a new instance-based service binding. The binding is naturally considered to be a singleton-scoped. Does NOT bind the service type itself as a contract type.

Type Parameters:
T - service type.
Parameters:
service - service instance.
Returns:
initialized binding builder.

bindFactory

public <T> ServiceBindingBuilder<T> bindFactory(java.lang.Class<? extends Factory<T>> factoryType,
                                                java.lang.Class<? extends java.lang.annotation.Annotation> factoryScope)
Start building a new factory class-based service binding.

Type Parameters:
T - service type.
Parameters:
factoryType - service factory class.
factoryScope - factory scope.
Returns:
initialized binding builder.

bindFactory

public <T> ServiceBindingBuilder<T> bindFactory(java.lang.Class<? extends Factory<T>> factoryType)
Start building a new factory class-based service binding. The factory itself is bound in a per-lookup scope.

Type Parameters:
T - service type.
Parameters:
factoryType - service factory class.
Returns:
initialized binding builder.

bindFactory

public <T> ServiceBindingBuilder<T> bindFactory(Factory<T> factory)
Start building a new factory instance-based service binding.

Type Parameters:
T - service type.
Parameters:
factory - service instance.
Returns:
initialized binding builder.

bind

public void bind(DynamicConfiguration configuration)
Description copied from interface: Binder
This method will be called by the ServiceLocatorUtilities.bind(org.glassfish.hk2.api.ServiceLocator, Binder...) method for each binder given. All of the updates will be committed as one commit operation.

Specified by:
bind in interface Binder
Parameters:
configuration - The non-null config to bind service references into

configure

protected abstract void configure()
Implement to provide binding definitions using the exposed binding methods.


bind

public <T> ActiveDescriptor<T> bind(Descriptor descriptor)
This method will bind the given descriptor to this Module. If the descriptor given is not an ActiveDescriptor then a non-reified ActiveDescriptor will be returned with the system provided fields set. If the descriptor given is a reified ActiveDescriptor then the descriptor returned will be a reified ActiveDescriptor that takes all values except for the id from the given descriptor

This method can be called only in the execution context of the configure() method.

Specified by:
bind in interface DynamicConfiguration
Parameters:
descriptor - May not be null. Will be used to derive the various key fields associated with the given provider
Returns:
The entry as added to the service registry, with fields of the Descriptor filled in by the system as appropriate

bind

public FactoryDescriptors bind(FactoryDescriptors factoryDescriptors)
This method will bind the descriptors found in the FactoryDescriptors. This method will first validate the descriptors from the FactoryDescriptors and then simply bind them into this configuration as two independent descriptors.

This method can be called only in the execution context of the configure() method.

Specified by:
bind in interface DynamicConfiguration
Parameters:
factoryDescriptors - A description of a factory service and the type the factory service provides. May not be null
Returns:
The descriptors returned from this object may be cast to ActiveDescriptor and will contain all the fields of the descriptors filled in by the system

addActiveDescriptor

public <T> ActiveDescriptor<T> addActiveDescriptor(ActiveDescriptor<T> activeDescriptor)
                                        throws java.lang.IllegalArgumentException
This allows third party systems to add reified active descriptors to the system. The active descriptor given must be fully reified (isReified must return true) and the create and destroy methods must be implemented.

This method can be called only in the execution context of the configure() method.

Specified by:
addActiveDescriptor in interface DynamicConfiguration
Parameters:
activeDescriptor - The reified active descriptor to be added to the system. The system will not attempt to reify this descriptor itself
Returns:
The entry as added to the service registry, with fields of the Descriptor filled in by the system as appropriate
Throws:
java.lang.IllegalArgumentException - if the descriptor is not reified

addActiveDescriptor

public <T> ActiveDescriptor<T> addActiveDescriptor(java.lang.Class<T> rawClass)
                                        throws MultiException,
                                               java.lang.IllegalArgumentException
This adds an active descriptor to the system based completely on the analysis of the given class. The class itself and all interfaces marked contract will be in the list of advertised services. The scope and qualifiers will be taken from the annotations on the class.

This method can be called only in the execution context of the configure() method.

Specified by:
addActiveDescriptor in interface DynamicConfiguration
Parameters:
rawClass - The class to analyze, must not be null
Returns:
The active (reified) descriptor that has been added to the system, with all fields filled in based on the rawClass
Throws:
MultiException - If this class cannot be a service
java.lang.IllegalArgumentException - if rawClass is null

addUnbindFilter

public void addUnbindFilter(Filter unbindFilter)
                     throws java.lang.IllegalArgumentException
This filter will added to the list of filters in this Configuration that will determine which Descriptors will be removed from the system. Only services directly from this Configuration objects' associated ServiceLocator will be given to this Filter (it will not be given descriptors from the ServiceLocators parent). The descriptors passed into this filter may be cast to ActiveDescriptor. The descriptors passed into this filter may or may not have been reified. This filter should not reify passed in descriptors.

And descriptor for which this filter returns true will be removed from the ServiceLocator prior to any additions that are performed with this Configuration object. Hence a Configuration can remove and add a descriptor of the same type in one commit.

In order to unbind a filter the caller of commit must pass the LOOKUP validators and the UNBIND validators.

This method can be called only in the execution context of the configure() method.

Specified by:
addUnbindFilter in interface DynamicConfiguration
Parameters:
unbindFilter - This filter will be added to the list of filters that this configuration object will use to determine which descriptors to unbind from the system. May not be null
Throws:
java.lang.IllegalArgumentException - if unbindFilter is null

commit

public void commit()
            throws MultiException
This causes the configuration to get committed. This method may only be called once

This method can be called only in the execution context of the configure() method.

Specified by:
commit in interface DynamicConfiguration
Throws:
MultiException - If errors were found in the commit process

install

public final void install(Binder... binders)
Adds all binding definitions from the binders to the binding configuration.

Parameters:
binders - binders whose binding definitions should be configured.


Copyright © 2012 Oracle Corporation. All Rights Reserved.