Class SimpleBeanStoreImpl

  • All Implemented Interfaces:
    BeanStore

    public class SimpleBeanStoreImpl
    extends Object
    implements BeanStore

    A helper class that simplifies implementations of the BeanStore interface.

    The purpose of this class is to support BeanStore implementations based on classes that are not aware of BeanProviders, but provide a map-like interface for accessing their data. This is achieved in the following ways:

    • Static data (in form of arbitrary objects) can directly be added to this class. Internally ConstantBeanProvider objects are created for the data objects to be managed. These providers are directly exposed through the BeanStore methods.
    • If dynamic data is involved (i.e. objects that may change over time and cannot be kept in a map), components can implement the internal BeanContributor interface and register themselves at a SimpleBeanStoreImpl instance. The BeanConstributor interface is much easier to implement than the BeanStore interface. The implementations of the BeanStore methods provided by this class take the registered BeanContributors into account.
    • Methods of the BeanStore interface that do not directly deal with bean providers are already implemented by this class.

    Note: The class per se is not thread-safe. When used inside the dependency injection framework, proper synchronization is automatically applied. But during initialization or for other use cases the developer has to ensure that there are no concurrent accesses.

    Version:
    $Id: SimpleBeanStoreImpl.java 213 2012-07-14 19:40:51Z oheger $
    Author:
    Oliver Heger
    • Constructor Detail

      • SimpleBeanStoreImpl

        public SimpleBeanStoreImpl()
        Creates a new instance of SimpleBeanStoreImpl.
      • SimpleBeanStoreImpl

        public SimpleBeanStoreImpl​(String name,
                                   BeanStore parent)
        Creates a new instance of SimpleBeanStoreImpl and sets the name and the reference to the parent.
        Parameters:
        name - the name of this bean store
        parent - the reference to the parent bean store
    • Method Detail

      • addBeanContributor

        public void addBeanContributor​(SimpleBeanStoreImpl.BeanContributor contr)
        Adds a new BeanContributor to this object. This contributor will be triggered when this bean store is accessed.
        Parameters:
        contr - the contributor to be added (must not be null)
        Throws:
        IllegalArgumentException - if the contributor is null
      • removeBeanContributor

        public void removeBeanContributor​(SimpleBeanStoreImpl.BeanContributor contr)
        Removes the specified bean contributor from this object.
        Parameters:
        contr - the contributor to remove
      • addBean

        public void addBean​(String name,
                            Object bean)
        Adds the specified bean to this store. For the passed in bean a constant bean provider is created. It can then be queried through the getBeanProvider() method.
        Parameters:
        name - the name of the bean (must not be null)
        bean - the bean (must not be null)
        Throws:
        IllegalArgumentException - if the name or the bean is null
      • removeBean

        public Object removeBean​(String name)
        Removes the bean with the given name.
        Parameters:
        name - the name of the bean to be removed
        Returns:
        the removed bean (null if the bean was unknown)
      • getBeanProvider

        public BeanProvider getBeanProvider​(String name)
        Returns a BeanProvider for the bean with the given name. This implementation checks whether such a bean was directly added using the addBean() method. If not, the registered bean contributors are consulted. If no such bean can be found, null is returned.
        Specified by:
        getBeanProvider in interface BeanStore
        Parameters:
        name - the name of the bean in question
        Returns:
        a BeanProvider for this bean
      • getName

        public String getName()
        Returns the name of this bean store.
        Specified by:
        getName in interface BeanStore
        Returns:
        the name of this bean store
      • setName

        public void setName​(String name)
        Sets the name of this bean store.
        Parameters:
        name - the new name
      • getParent

        public BeanStore getParent()
        Returns the parent bean store.
        Specified by:
        getParent in interface BeanStore
        Returns:
        the parent store
      • setParent

        public void setParent​(BeanStore parent)
        Sets the parent bean store.
        Parameters:
        parent - the parent bean store
      • setConversionHelper

        public void setConversionHelper​(ConversionHelper conversionHelper)
        Sets the ConversionHelper associated with this object. The object passed to this method will be returned by getConversionHelper().
        Parameters:
        conversionHelper - the ConversionHelper
      • providerNames

        public Set<String> providerNames()
        Returns a set with the names of the available bean providers. This implementation will first obtain the names of all directly added beans. Then the registered bean contributors are invoked to add their bean names to the resulting list.
        Specified by:
        providerNames in interface BeanStore
        Returns:
        a set with the names of the known bean providers
      • providerFor

        protected BeanProvider providerFor​(Object bean)
        Returns a bean provider for the specified bean. This method is called whenever a bean has to be wrapped by a provider. This default implementation returns a ConstantBeanProvider for the passed in bean.
        Parameters:
        bean - the bean
        Returns:
        a provider for this bean