Class InstantiationPolicy
- All Implemented Interfaces:
Serializable
,Cloneable
- Direct Known Subclasses:
MultiArgInstantiationPolicy
,PersistenceObjectInstantiationPolicy
,SDOType.TypeInstantiationPolicy
So, here is how it works:
If there is no method specified
- all the other settings are ignored and
- the descriptor class's default constructor is invoked.
If a factory is specified
- the factoryClass and factoryClassMethod are ignored and
- the method is invoked on the factory.
If neither a factory nor a factoryClass are specified
- the factoryClassMethod is ignored and
- the method is invoked on the descriptor class (as a static).
If only the factoryClass is specified
- the factory is created by invoking the factoryClass' default (zero-argument) constructor and
- the method is invoked on the resulting factory.
If both the factoryClass and the factoryClassMethod are specified
- the factory is created by invoking the factoryClassMethod on the factoryClass (as a static) and
- the method is invoked on the resulting factory.
The only thing we can't support in the current configuration is invoking a static on some, client-specified, factoryClass to build new instances of the descriptor class; and it's debatable whether that is desirable...
It might be reasonable to rework this into a number of different classes that implement an interface...
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ClassDescriptor
Backpointer to descriptor.protected Object
The object factory.protected Class
<?> The class of the factory.protected String
protected String
Static method invoked on the factoryClass to get the factory instance.protected Method
The method is resolved during initialization, and it is not serialized.protected String
The method invoked on either the descriptor class (in which case it is static) or the factory (in which case it is not static) to build a new instance of the descriptor class. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected Constructor
Build and return the default (zero-argument) constructor for the descriptor class.protected Constructor
buildDefaultConstructorFor
(Class<?> javaClass) Build and return the default (zero-argument) constructor for the specified class.protected Object
protected Constructor
Build and return the default (zero-argument) constructor for the factory class.protected Object
Build and return the factory, using its default constructor.protected Object
Build and return the factory, using the specified static method.protected Method
buildMethod
(Class<?> methodClass, String methodName, Class<?>[] methodParameterTypes) Build the specified method.Build and return a new instance, using the appropriate mechanism.protected Object
Build and return a new instance, using the default (zero-argument) constructor.protected Object
Build and return a new instance, using the factory.clone()
INTERNAL: Clones the InstantiationPolicyvoid
convertClassNamesToClasses
(ClassLoader classLoader) INTERNAL: Convert all the class-name-based settings in this InstantiationPolicy to actual class-based settings.protected Constructor
Return the default (zero-argument) constructor for the descriptor class.protected ClassDescriptor
Class
<?> protected Method
void
initialize
(AbstractSession session) If necessary, initialize the factory and the method.protected void
Initialize the method.boolean
If no method name is specified, they we have to use the default (zero-argument) constructor.protected void
setDefaultConstructor
(Constructor defaultConstructor) void
setDescriptor
(ClassDescriptor descriptor) protected void
setFactory
(Object factory) protected void
setFactoryClass
(Class<?> factoryClass) protected void
setFactoryClassName
(String factoryClassName) protected void
setFactoryMethodName
(String factoryMethodName) protected void
void
setMethodName
(String methodName) toString()
void
void
useFactoryInstantiationPolicy
(Class<?> factoryClass, String methodName) void
useFactoryInstantiationPolicy
(Class<?> factoryClass, String methodName, String factoryMethodName) void
useFactoryInstantiationPolicy
(Object factory, String methodName) void
useFactoryInstantiationPolicy
(String factoryClassName, String methodName) void
useFactoryInstantiationPolicy
(String factoryClassName, String methodName, String factoryMethodName) void
useMethodInstantiationPolicy
(String staticMethodName)
-
Field Details
-
methodName
The method invoked on either the descriptor class (in which case it is static) or the factory (in which case it is not static) to build a new instance of the descriptor class. -
method
The method is resolved during initialization, and it is not serialized. -
factoryClass
The class of the factory. The factory is instantiated by either invoking this class's default (zero-argument) constructor or the factoryMethod specified below. -
factoryClassName
-
factoryMethodName
Static method invoked on the factoryClass to get the factory instance. If this is null, the factory class's default (zero-argument) constructor is invoked. -
factory
The object factory. This can be specified directly by the client, or it can be built dynamically using the the factoryClass and, optionally, the factoryMethodName. -
descriptor
Backpointer to descriptor.
-
-
Constructor Details
-
InstantiationPolicy
public InstantiationPolicy()Default constructor
-
-
Method Details
-
buildNewInstance
Build and return a new instance, using the appropriate mechanism.- Specified by:
buildNewInstance
in classCoreInstantiationPolicy
- Throws:
DescriptorException
-
buildNewInstanceUsingDefaultConstructor
Build and return a new instance, using the default (zero-argument) constructor.- Throws:
DescriptorException
-
buildNewInstanceUsingFactory
Build and return a new instance, using the factory. The factory can be null, in which case the method is a static method defined by the descriptor class.- Throws:
DescriptorException
-
clone
INTERNAL: Clones the InstantiationPolicy -
getDefaultConstructor
Return the default (zero-argument) constructor for the descriptor class.- Throws:
DescriptorException
-
buildDefaultConstructor
Build and return the default (zero-argument) constructor for the descriptor class.- Throws:
DescriptorException
-
buildDefaultConstructorFor
Build and return the default (zero-argument) constructor for the specified class.- Throws:
DescriptorException
-
getDescriptor
-
getFactoryMethodName
-
getFactory
-
getFactoryClass
-
getFactoryClassName
-
getMethod
-
getMethodName
-
initialize
If necessary, initialize the factory and the method.- Throws:
DescriptorException
-
buildFactory
- Throws:
DescriptorException
-
buildFactoryUsingDefaultConstructor
Build and return the factory, using its default constructor.- Throws:
DescriptorException
-
buildFactoryDefaultConstructor
Build and return the default (zero-argument) constructor for the factory class.- Throws:
DescriptorException
-
buildFactoryUsingStaticMethod
Build and return the factory, using the specified static method.- Throws:
DescriptorException
-
initializeMethod
Initialize the method. It is either a static on the descriptor class, or it is a non-static on the factory.- Throws:
DescriptorException
-
buildMethod
protected Method buildMethod(Class<?> methodClass, String methodName, Class<?>[] methodParameterTypes) throws DescriptorException Build the specified method.- Throws:
DescriptorException
-
isUsingDefaultConstructor
public boolean isUsingDefaultConstructor()If no method name is specified, they we have to use the default (zero-argument) constructor. -
setDefaultConstructor
-
setDescriptor
-
setFactoryMethodName
-
setFactory
-
setFactoryClass
-
setFactoryClassName
-
setMethod
-
setMethodName
-
convertClassNamesToClasses
INTERNAL: Convert all the class-name-based settings in this InstantiationPolicy to actual class-based settings. This method is used when converting a project that has been built with class names to a project with classes. -
toString
-
useDefaultConstructorInstantiationPolicy
public void useDefaultConstructorInstantiationPolicy() -
useFactoryInstantiationPolicy
-
useFactoryInstantiationPolicy
-
useFactoryInstantiationPolicy
- Specified by:
useFactoryInstantiationPolicy
in classCoreInstantiationPolicy
-
useFactoryInstantiationPolicy
-
useFactoryInstantiationPolicy
-
useMethodInstantiationPolicy
-