code: protected <T> T getOrCreateComponent(Class<T> componentClass) {
        return getComponent(componentClass, componentClass.getName());
     }
docs: Retrieves a component if one exists, and if not, attempts to find a factory capable of constructing the component
  (factories annotated with the {@link DefaultFactoryFor} annotation that is capable of creating the component
  class).
  <p/>
  If an instance needs to be constructed, dependencies are then automatically wired into the instance, based on
  methods on the component type annotated with {@link Inject}.
  <p/>
  Summing it up, component retrieval happens in the following order:<br /> 1.  Look for a component that has already
  been created and registered. 2.  Look for an appropriate component that exists in the {@link Configuration} that
  may be injected from an external system. 3.  Look for a class definition passed in to the {@link Configuration} -
  such as an EvictionPolicy implementation 4.  Attempt to create it by looking for an appropriate factory (annotated
  with {@link DefaultFactoryFor})
  <p/>
  
  @param componentClass type of component to be retrieved.  Should not be null.
  @return a fully wired component instance, or null if one cannot be found or constructed.
  @throws CacheConfigurationException if there is a problem with constructing or wiring the instance.