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

文/李智慧

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

利用 XML配置文件绑定Map的key与Model成员之间的映射关系,即在配置文件中需映射指定Map中key与Model的成员变量名。
配置文件有两种,一种具体的 mapping配置,如下
Hello.xml
<mapping class =” sample.lizhihui.Hello ” externd=“sample.lizhihui.Say”>
< property
                        Key = "NAME"
                        Member = "name"
                        null = "map"
                  />
< SingleClass
                        Key = "NAME_LIST"
                        Member = "nameList"
                        null = "map"
                        reference =”hello 1
                  />
< Multi Class
                        Key = "NAME_BEAN"
                        Member = "nameBean"
                        null = "map"
                        reference =”hello 2
                  />
 
</mapping>
另一种配置文件是 mpping索引列表,如下。
MapModelMapping.xml
<list>
<element reference = ”hello value=” conf/mapmodel/hello.xml ”/>
<element reference = ”hello 1 value=” conf/mapmodel/hello 1 .xml ”/>
<element reference = ”hello 2 value=” conf/mapmodel/hello 2 .xml ”/>

</list> 

类图

ModelMapBuilderFactory: ModelMap映射构建器工厂,负责create builder。初始化时生成全部构建规则树,并把树Root保存在Map中。

ModelMapBuilderModelMap映射构建器,根据输入的MapModel执行映射规则,完成映射。

MappingRuler:映射规则接口,定义映射方法。

Root:映射规则树Root,通过遍历树中节点列表List<Node>并调用节点的映射方法完成映射。

Node:映射规则节点类,Abstract Class,声明节点共通成员,不实现接口映射方法。

Leaf:映射规则叶子节点类,对应配置文件中type为基本数据类型,实现接口映射方法,完成最终数据映射。

SingleBranch:映射规则单根分支节点类,对应配置文件中typeSingleClass,根据入力参数获得被映射的MapModel,调用Root成员的映射方法,完成映射。

MultiBranch :映射规则多根分支节点类,对应配置文件中typeMultiClass,根据入力获得被映射的MapModelList,遍历 List 调用Root成员的映射方法,完成映射。

时序  

图表示通过配置文件转换model-to-map的调用关系

1.1User调用MapModelBuilderFactorygetBuilder()方法

1.2MapModelBuilderFactory返回MapModelBuilder实例

1.3、调用MapModelBuilderbuildMap()方法构建map,或者调用MapModelBuilderbuilderModel()方法构建model

2.1MapModelBuilderFactory调用inti()初始化

2.2MapModelBuilderFactory创建MapModelBuilder实例

2.3、返回MapModelBuilder实例

3.1MapModelBuilder调用RootbuildMap()方法或者buildModel()方法

4.1Root调用NodebuildMap()方法或者buildModel()方法

 

  • 0
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值