当前位置: 首页 > news >正文

wap网站开发流程酒店线上营销方案

wap网站开发流程,酒店线上营销方案,中装建设重组最新消息,如何做网站推广下拉刘贺稳14Bean映射工具选择工作中#xff0c;我们经常需要将对象转换成不同的形式以适应不同的api#xff0c;或者在不同业务层中传输对象而不同分层的对象存在不同的格式#xff0c;因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。进行这种转换除了手动编写大…Bean映射工具选择工作中我们经常需要将对象转换成不同的形式以适应不同的api或者在不同业务层中传输对象而不同分层的对象存在不同的格式因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。进行这种转换除了手动编写大量的get/set代码还可以使用一些方便的类库常用的有apache的BeanUtilsspring的BeanUtilscglib的BeanCopier。BeanUtilsapache的BeanUtils和spring的BeanUtils中拷贝方法的原理都是先用jdk中 java.beans.Introspector类的getBeanInfo()方法获取对象的属性信息及属性get/set方法接着使用反射(Method的invoke(Object obj, Object... args))方法进行赋值。apache支持名称相同但类型不同的属性的转换spring支持忽略某些属性不进行映射他们都设置了缓存保存已解析过的BeanInfo信息。BeanCopiercglib的BeanCopier采用了不同的方法它不是利用反射对属性进行赋值而是直接使用ASM的MethodVisitor直接编写各属性的get/set方法(具体过程可见BeanCopier类的generateClass(ClassVisitor v)方法)生成class文件然后进行执行。由于是直接生成字节码执行所以BeanCopier的性能较采用反射的BeanUtils有较大提高这一点可在后面的测试中看出。Dozer使用以上类库虽然可以不用手动编写get/set方法但是他们都不能对不同名称的对象属性进行映射。在定制化的属性映射方面做得比较好的有DozerDozer支持简单属性映射、复杂类型映射、双向映射、隐式映射以及递归映射。可使用xml或者注解进行映射的配置支持自动类型转换使用方便。但Dozer底层是使用reflect包下Field类的set(Object obj, Object value)方法进行属性赋值执行速度上不是那么理想。Orika那么有没有特性丰富速度又快的Bean映射工具呢这就是下面要介绍的OrikaOrika是近期在github活跃的项目底层采用了javassist类库生成Bean映射的字节码之后直接加载执行生成的字节码文件因此在速度上比使用反射进行赋值会快很多下面详细介绍Orika的使用方法。Orika使用依赖ma.glasnost.orikaorika-core1.5.2简单映射构造一个MapperFactoryMapperFactory mapperFactory new DefaultMapperFactory.Builder().build();注册字段映射mapperFactory.classMap(PersonSource.class, PersonDestination.class).field(firstName, givenName).field(lastName, sirName).byDefault().register();进行映射MapperFacade mapper mapperFactory.getMapperFacade();PersonSource source new PersonSource();// set some field values...// map the fields of source onto a new instance of PersonDestPersonDest destination mapper.map(source, PersonDest.class);在第二步进行的字段映射是双向的我们可以从目标类型映射回源类型byDefault()方法用于注册名称相同的属性(如果所有属性名称都相同则可以省略第2步)如果不希望某个字段参与映射可以使用exclude方法复杂映射数组和List的映射如果在目标类和目的类中分别有下面的属性class BasicPerson {private List nameParts;// getters/setters omitted}class BasicPersonDto {private String firstName;private String lastName;// getters/setters omitted}可以使用下面的方式进行映射mapperFactory.classMap(BasicPerson.class, BasicPersonDto.class).field(nameParts[0], firstName).field(nameParts[1], lastName).register();类类型的映射class Name {private String first;private String last;private String fullName;// getters/setters}class BasicPerson {private Name name;// getters/setters omitted}class BasicPersonDto {private String firstName;// getters/setters omitted}使用mapperFactory.classMap(BasicPerson.class, BasicPersonDto.class).field(name.first, firstName).register();自定义转换器orika同样支持自定义转换器将指定类型或指定名称的属性做映射时添加自定义操作例如将String类型的或某个属性映射后加一个前缀或者将Integer类型映射后加1等public class MyConverter extends CustomConverter {public MyDate convert(Date source, Type extends MyDate destinationType) {// return a new instance of destinationType with all properties filled//examplesource 1}}Date为源类型中要做转换的属性数据类型例如String、Integer等MyDate为目标类型中要做转换的属性数据类型。如果需要定义全局范围的转换ConverterFactory converterFactory mapperFactory.getConverterFactory();converterFactory.registerConverter(new MyConverter());如果仅需要某几个属性使用转换器ConverterFactory converterFactory mapperFactory.getConverterFactory();converterFactory.registerConverter(myConverterIdValue, new MyConverter());mapperFactory.classMap( Source.class, Destination.class ).fieldMap(sourceField1, sourceField2).converter(myConverterIdValue).add()....register();其他说明Orika支持递归映射将映射嵌套类直到用“简单”类型完成映射。它还包含故障保险以正确处理正在尝试映射的对象中的递归引用。在于spring集成时可以将MapperFactory设置为单例各映射工具的性能测试构造一个包含普通类型及类类型的Bean对象,使用jmh微基准框架进行测试。由于jvm会对热点代码进行优化方法反射调用次数超过阈值时会生成一个专用的MethodAccessor实现类生成其中的invoke()方法的字节码进行执行。故测试时每种方法先预热执行15次而后再执行100次获取每次执行的平均时间Benchmark Mode Samples Score Score error Unitso.s.MyBenchmark.apache avgt 100 25.246 0.535 us/opo.s.MyBenchmark.beanCopier avgt 100 0.004 0.000 us/opo.s.MyBenchmark.byHand avgt 100 0.004 0.000 us/opo.s.MyBenchmark.dozer avgt 100 5.855 0.260 us/opo.s.MyBenchmark.orika avgt 100 0.353 0.017 us/opo.s.MyBenchmark.spring avgt 100 0.627 0.020 us/op统计报告中Units单位为微秒/次由Score项可以看出基于ASM的cglib BeanCopier拷贝速度基本和手写get/set方法的速度无异其次的就是基于javassist的Orika了Orika的速度是spring BeanUtils的两倍Dozer的20倍Apache BeanUtils的120倍。综上当属性名和属性类型完全相同时使用BeanCopier是最好的选择当存在属性名称不同或者属性名称相同但属性类型不同的情况时使用Orika是一种不错的选择。如果你对Orika感到不放心实际应用前可以写个测试类查看它的转换结果是否符合预期。
http://www.sadfv.cn/news/19555/

相关文章:

  • 网站百度快照更新图书建设网站
  • 新乡网站设计网站设计的优点
  • 顺德企业网站制作产品工艺设计
  • 男女做那个的网站是什么网站开发定制公司
  • 中国建设网官方网站e路护航北京正规seo搜索引擎优化价格
  • 学校网站建设主要成绩交互网站 百度
  • 济宁房产网站建设网站建设的整体流程有哪些
  • 深圳勘察设计协会网站给网站写教案做课件一节课多少钱
  • 设计网站推荐 猪装修公司加盟品牌排行榜
  • 网站将要准备建设的内容有哪些商业网站开发需求
  • 咸宁网站设计公司asp.net网站的验证码怎么使用
  • 新公司怎样做网站在四川眉山便民平台推广怎么做
  • 做好一个网站需要多久科技公司起名字大全免费
  • 免费制作网站的步骤 怎样做网站医疗设备公司的网站怎么做
  • 县网站建设检查情况汇报软文营销写作技巧有哪些?
  • 什么是静态页面网站商城网站解决方案
  • 无网站网络营销python做爬虫和做网站
  • 自建网站的优缺点被忽悠去做网销了
  • 服务网站建设排行wordpress媒体库是哪个文件夹
  • 西安网站开发有哪些公司做画找图网站
  • 南通网站建设排名开发app的过程
  • 网站获取访客手机号源码监理网站建设价格多少
  • 网站原型图是什么零点研究咨询集团官方网站建设
  • 建立网站的第一步泉州仿站定制模板建站
  • 高端企业网站报价自己做软件 做网站需要学会哪些
  • 电商学习网站网站设计 公司 长沙
  • 东莞浩智建设网站哪家比较好wordpress还能玩吗
  • 泰国做网站做视频包的网站有哪些
  • 介绍小说的网站模板下载地址手工建站与模板网站的区别
  • 做一个搜索引擎网站要多少钱网站建设开发报价方案模板