T
- The type of the instances being served by the factory.org.refcodes.mixin.TypeAccessor<T>
ClassTypeFactory
, PrototypeFactory
@FunctionalInterface public interface TypeFactory<T> extends org.refcodes.mixin.TypeAccessor<T>
TypeFactory
defines the functionality which must be provided in
order to represent a factory for object creation of a predefined type
specified with a generic argument (in contrast to the
BeanLookupFactory
, which creates instances of an expected type).
Many alternative implementations of a TypeFactory
may may exist which
construct the instances their way.
Having factories that generic as we define it here, we are able to decouple
our business logic from any specific framework: Your business logic must not
know anything about how the instances are generated. It mainly just needs to
know how to use the TypeFactory
. It is up to the application "end
point", i.e. a command line tool with a main-method or a web-application to
finally decide which factory to use.
Depending on the implementation used or configuration provided, the
TypeFactory
may return singletons or dedicated separate instances
when queried for instances.
org.refcodes.mixin.TypeAccessor.TypeBuilder<T extends Object,B extends org.refcodes.mixin.TypeAccessor.TypeBuilder<T,B>>, org.refcodes.mixin.TypeAccessor.TypeMutator<T extends Object>, org.refcodes.mixin.TypeAccessor.TypeProperty<T extends Object>
Modifier and Type | Method | Description |
---|---|---|
T |
createInstance() |
This method creates / retrieves an instance of the given type with the
given identifier (name) constructed as defined in one to many
configuration files.
|
default T |
createInstance(Map<String,String> aProperties) |
This method creates / retrieves an instance of the given type with the
given identifier (name) constructed as defined in one to many
configuration files.
|
default Class<T> |
getType() |
This method retrieves the type which the implementing factory produces.
|
T createInstance()
ClassCastException
- in case the fabricated type is not type
compatible with the required type T.default T createInstance(Map<String,String> aProperties)
aProperties
- The dynamic properties which are used to configure the
desired bean.ClassCastException
- in case the fabricated type is not type
compatible with the required type T.default Class<T> getType()
createInstance()
's
Object.getClass()
(as we cannot get a generic type's class if not
explicitly passed to an instance e.g. through it's constructor).
Attention: To avoid unnecessary calls to potentially expensive
createInstance()
methods, please overwrite this method.getType
in interface org.refcodes.mixin.TypeAccessor<T>
Copyright © 2021. All rights reserved.