-
Notifications
You must be signed in to change notification settings - Fork 113
ProgramGuide
agapple edited this page Feb 28, 2013
·
3 revisions
介绍BeanMapping的内部设计&扩展点
iteye相关文章:
相关说明:
- 将属性mapping的动作抽象成Get/ Se两个操作。 Get操作针对数据源对象,Set操作针对数据目标对象
- 在Get/Set中间,定义了一个ValueProcess处理插件的概念,允许扩展相关的功能插件 (自认为相比于BeanUtils/BeanCopier的非常好的亮点,扩展性良好)
- 整个BeanMapping是采用微内核的设计,自身的一些功能点也是通过ValueProcess插件.
- Get操作抽象为GetExecutor
- FieldGetExecutor
- MapGetExecutor
- PropertyGetExecutor
- ThisSymbolGetExecutor
- Set操作抽象为SetExecutor
- FieldSetExecutor
- MapSetExecutor
- PropertySetExecutor
说明:
- GetExecutor/SetExecutor的选择处理,客户端可通过Uberspector进行获取
- Executor的抽象,允许自定义新的Get/Set操作处理,比如Factory模式的支持等,扩展相对比较容易
Uberspector.getInstance().getGetExecutor(Class locatorClass, Object identifier) Uberspector.getInstance().getSetExecutor(Class locatorClass, Object identifier, Class arg)
TODO
相关类图设计
ValueProcess是本工具设计的核心点,也是相应的功能扩展点. 它在这个mapping过程中,所处的位置就是Get,Set的当中,允许动态的进行修改。
默认支持的几个ValueProcess插件:
- DefaultValueValueProcess (支持Value Mapping Example)
- ConvertorValueProcess (支持[UserGuide#基础类型 Example])
- ScriptValueProcess (支持Example)
- DebugValueProcess (打印debug信息)
- BehaviorValueProcess (支持UserGuide#global-configurations功能)
相关类图设计:
ValueProcess接口:
public interface ValueProcess { public Object process(Object value, ValueProcessInvocation invocation) throws BeanMappingException; }
CustomValueProcess:
public class CustomValueProcess implements ValueProcess { public Object process(Object value, ValueProcessInvocation invocation) throws BeanMappingException { ValueProcessContext context = invocation.getContext(); if(context xxxx) { // do with something } return invocation.proceed(value); // 继续传递 } }
相关说明:
- ValueProcessContext整个ValueProcess处理过程中的上下文相关数据
- BeanMappingParam: 当前需要进行mapping操作的相关参数对象
- BeanMappingObject: 当前需要进行mapping操作的相关配置对象(基于XML or Mapping API)后的解析结果
- BeanMappingField: 当前进行mapping操作的field属性配置对象(比如src/target field)
- ValueProcessInvocation: 为ValueProcess的调度控制器
- invocation.getContext(): 可获取ValueProcessContext对象
- invocation.proceed(value): 传递给chian ValueProcess的下一个节点
- BeanMapping : 本轮子的核心功能,通过基于配置方式的mapping映射,支持convetor,defaultValue,script的所有功能。要求使用之前必须提前配置bean-mapping映射。
- BeanCopy 和 BeanMap : 都是一些扩展功能,基于本轮子的核心架构不变的基础上,开发了BeanUtils.copyProperties() , BeanUtils.describe, BeanUtils.populate()的功能。 使用该api,可以不需要配置映射文件,会进行自动扫描,就是基于同名属性的处理前提。
- BeanMappingUtil : 提供了BeanMapping , BeanCopy , BeanMap的所有方法,提供静态的util方法处理。每次都会构造对应的BeanMapping等对象,注意:每次进行构造BeanCopy,BeanMap,解析的属性结果会有cache。所以使用该util不会有很明显的性能下降,无非就是多一些临时对象。