您的位置:首页 > 编程语言 > Java开发

一种Map与JavaBean可配置转换的实现

2007-04-17 13:10 337 查看
文/李智慧

Map与Model(JavaBean)之间存在逻辑映射关系,在存在Map实例的情况下,可通过调用该工具获得对应的Model实例,在存在Model实例的情况下,可通过调用该工具获得对应的Map实例。该工具支持JavaBean包含(成员类包含,成员类list包含),继承关系,使用composite模式。

利用XML配置文件绑定Map的key与Model成员之间的映射关系,即在配置文件中需映射指定Map中key与Model的成员变量名。
配置文件有两种,一种具体的mapping配置,如下
Hello.xml
[align=left]<mapping class=” sample.lizhihui.Hello” externd=“sample.lizhihui.Say”>[/align]
[align=left]<property[/align]
[align=left] Key="NAME"[/align]
[align=left] Member="name"[/align]
[align=left] null="map"[/align]
[align=left] />[/align]
[align=left]< SingleClass[/align]
[align=left] Key="NAME_LIST"[/align]
[align=left] Member="nameList"[/align]
[align=left] null="map"[/align]
[align=left] reference=”hello1”[/align]
/>
[align=left]< MultiClass[/align]
[align=left] Key="NAME_BEAN"[/align]
[align=left] Member="nameBean"[/align]
[align=left] null="map"[/align]
[align=left] reference=”hello2”[/align]
/>

</mapping>
另一种配置文件是mpping索引列表,如下。
MapModelMapping.xml
<list>
<element reference=”hello” value=”conf/mapmodel/hello.xml”/>
<element reference=”hello1” value=”conf/mapmodel/hello1.xml”/>
<element reference=”hello2” value=”conf/mapmodel/hello2.xml”/>
</list>

类图



ModelMapBuilderFactory: ModelMap映射构建器工厂,负责create builder。初始化时生成全部构建规则树,并把树Root保存在Map中。
ModelMapBuilder:ModelMap映射构建器,根据输入的Map或Model执行映射规则,完成映射。
MappingRuler:映射规则接口,定义映射方法。
Root:映射规则树Root,通过遍历树中节点列表List<Node>并调用节点的映射方法完成映射。
Node:映射规则节点类,Abstract Class,声明节点共通成员,不实现接口映射方法。
Leaf:映射规则叶子节点类,对应配置文件中type为基本数据类型,实现接口映射方法,完成最终数据映射。
SingleBranch:映射规则单根分支节点类,对应配置文件中type为SingleClass,根据入力参数获得被映射的Map或Model,调用Root成员的映射方法,完成映射。
MultiBranch:映射规则多根分支节点类,对应配置文件中type为MultiClass,根据入力获得被映射的Map或Model的List,遍历该List调用Root成员的映射方法,完成映射。
时序图



上图表示通过配置文件转换model-to-map的调用关系:
1.1、User调用MapModelBuilderFactory的getBuilder()方法
1.2、MapModelBuilderFactory返回MapModelBuilder实例
1.3、调用MapModelBuilder的buildMap()方法构建map,或者调用MapModelBuilder的builderModel()方法构建model
2.1、MapModelBuilderFactory调用inti()初始化
2.2、MapModelBuilderFactory创建MapModelBuilder实例
2.3、返回MapModelBuilder实例
3.1、MapModelBuilder调用Root的buildMap()方法或者buildModel()方法
4.1、Root调用Node的buildMap()方法或者buildModel()方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: