[
http://issues.apache.org/jira/browse/IBATIS-50?page=comments#action_12319991 ]
Oleg Shpak commented on IBATIS-50:
----------------------------------
Because I need factories very much I had a go at hacking iBatis.
If iBatis developers are interested I would be glad to send them the modified
files/diff.
Of course, I do not think that what I did is a complete solution and that it is
implemented in the most correct way.
My idea was very simple (maybe overly simple):
- I added getFactory/setFactory to ResultMap iface and implemented it in
BasicResultMap. I added the setter because I didn't want to mess about with the
configuration code. It's fine by me to set the factory in my DAO initialisation.
- defined this interface
public interface ObjectFactory {
Object createInstance(Class resultMapClass);
}
- patched 2 classes in com.ibatis.sqlmap.engine.exchange
ComplexDataExchange and JavaBeanDataExchange
replaced line (2 occurencies in every file).
object = Resources.instantiate(resultMap.getResultClass());
with
if(resultMap.getFactory()!=null)
object =
resultMap.getFactory().createInstance(resultMap.getResultClass());
else
object = Resources.instantiate(resultMap.getResultClass());
that's all.
> Ability to override the default bean creation mechanism
> -------------------------------------------------------
>
> Key: IBATIS-50
> URL: http://issues.apache.org/jira/browse/IBATIS-50
> Project: iBatis for Java
> Type: Wish
> Components: SQL Maps
> Versions: 2.0.9
> Reporter: Philippe Laflamme
>
> Currently, iBatis is responsible for creating instances of classes used in
> result maps. It relies on the assumption that objects can be obtained using
> the Class.newInstance() method (or something equivalent).
> The assumption forces users of the framework to create classes with a no-arg
> default constructor. IMHO, this also has the effect of favoring
> implementation inheritance (extends) over interface inheritance.
> Although this is not a problem in most cases, the ability to plug in an
> external instance factory would provide more flexibility and favor good
> programming practices. Amongst other things, it would provide developers the
> ability write code in terms of interface.
> A simple solution is to provide an extension point where resultMap class
> instances are obtained from.
> The simplest form would be:
> public interface InstanceFactory {
> Object createInstance(Class resultMapClass);
> }
> The default implementation would do something along the lines of:
> [...]
> return resultMapClass.newInstance();
> [...]
> Developers could configure iBatis to either use the default implementation or
> their own custom implementation. The setting could be part of the
> sqlMapConfig file or even per resultMap.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira