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

广西中国建设银行网站首页seo快速排名系统

广西中国建设银行网站首页,seo快速排名系统,网站ico图标,用ssh做的网站这篇文章起源于项目中一个特殊的需求。由于目前的开发方式是前后端分离的#xff0c;基本上是通过接口提供各个服务。而前两天前端fe在开发中遇到了一些问题#xff1a;他们在处理字符串类型的时间时会出现精度丢失的情况#xff0c;所以希望后台是以时间戳的形式返回给前端…这篇文章起源于项目中一个特殊的需求。由于目前的开发方式是前后端分离的基本上是通过接口提供各个服务。而前两天前端fe在开发中遇到了一些问题他们在处理字符串类型的时间时会出现精度丢失的情况所以希望后台是以时间戳的形式返回给前端。而与此同时后台的设计是这个样子的所有的时间在数据库中均保存为varchar类型在序列化的时候也是按String字符串去处理的。这样一来就需要一些解决方案1. 所有数据库的时间字段都用timestamp替换这个是最简单确实实现代价最高的一种方案由于数据库表太多并且涉及多处的耦合此方案不可行。2. 通过fastjson序列化层去转换类型首先想到的是能不能通过fastjson自己提供的注解方式实现后调研之后发现目前使用的版本并不支持然后想到可以通过fastjson提供的序列化器重载实现String类型的拦截并做处理。但是这种方案会把所有String的字段都执行这段逻辑并且还要通过固定的format确定哪些是日期这里非常影响性能最后决定添加自定义注解在需要这种类型转换的字段上加上自定义的StringToDate注解然后在序列化执行的入口给所有加了此注解的类提供继承并实现扩展的序列化器完成自定义的序列化过程。下面就详细说一下这个过程一是对fastjson源码做一个解析和说明二也是对自己的工作做一个总结。1. 如何实现扩展首先来看一下自定义的注解很简单关于这个注解的用法和定义我就不细说了Retention指定了他的作用域而Target说明该注解用于field字段上。然后既然是要扩展fastjson的功能我们就来看一下fastjson的入口首先是WebMvcConfigurerAdapter这个类我们可以通过继承和重写该类的方法实现MVC的配置比如拦截器、资源处理器等。我们重写的方法是configureMessageConverters这个是用来配置信息转化的converter可以看到我们通过这个方法调用了父类同时加入了fastJson的converter然后我们来看看FastJsonMessageConverter这个我们自己写的类只是很简单的通过继承实现了自定义config的注入然后再来看看我们自己写的这个config这里是最关键的地方SerializeConfig提供一个入口方法getObjectWriter可以用来对传入的类型进行处理并为相应的类型设置对应的Serializer序列化器。这里可以看到我通过判断传入class的注解判断是不是要处理的类型如果是需要转换的就用我们写的ExtendJavaBeanSerializer去处理他。(同时可以看到这里我做了缓存处理每次的class在处理之后都会通过父类的put方法放入缓存这样可以大大减少遍历和判断的次数提高处理性能)那现在就要看看这个ExtendJavaBeanSerializer做了什么这里我们继承了JavaBeanSerializer并重写了processValue方法。这里要说个点因为每个序列化器都有write方法所以最开始直观的想法是重写这个方法实现扩展但是由于write方法很长很长(有250多行)作为切入点非常不方便然后仔细观察源码发现其中有这么一句propertyValue this.processValue(serializer, fieldSerializer.fieldContext, object, fieldInfoName,propertyValue);这句看上去好像就是给我们处理value值的再点进去一看processValue居然是个protected方法。那正如意这就是给我们做扩展的入口最后便重写了这个方法并在其中实现了StringToDate的转换逻辑。2. fastjson源码思想其实呢到这里应该会有一个疑问fastjson提供的预设序列化器有很多很多看源码发现一个包下面满满都是。那么我们是如何确定要继承这个JavaBeanSerializer的呢这就需要看fastjson的源码了看看它究竟是怎么分配和执行这个序列化器的首先是SerializeConfig这个类这个类的config中预设了大量的类型和序列化器的对应关系他原有的getObjectWriter入口是这样的逻辑 先判断传入类是不是config中有的如果有直接给对应的Serializer如果没有又会有一堆特殊类(比如集合异常编码等类)的判断而他们也有对应的Serializer。那如果还没有(比如自己的javabean)在最后会执行一个createJavaBeanSerializer(clazz) 的方法在这个方法中默认会执行createASMSerializer方法asm查阅资料会发现是一个老外写的字节码序列化器是序列化最底层的一个工具很多开源序列化包都是对这个进行封装实现的。那我们要继承JavaBeanSerializer这个类并使用自己的就说明我们不想让他执行createASMSerializer这个方法为什么呢因为在createASMSerializer里面的逻辑是当序列化对象 256个时会创建可继承的JavaBeanSerializer去处理如果256,则不会给他任何序列化器而是直接通过反射方式在内存中(就是生生拼出了一个序列化过程)实现对这个对象的处理。关键代码如下当然下面还有很长很长的内存字节码操作的逻辑我就不贴出了。我想这可能也是fastjson快的一个原因吧。写到这里关于对fastjson的扩展就差不多说完了其实fastjson的源码中其他类中也都有自己独特的优化方式有些还是挺有意思的。另外呢我惊奇地发现fastjson的作者和durid居然是一个人这个来自阿里的wenshao还真的厉害啊。作为一个学习者只是希望有朝一日也能写出这么漂亮的代码吧希望自己可以不断努力
http://www.zqtcl.cn/news/421284/

相关文章:

  • 筑巢网络官方网站打开搜索引擎
  • 赣州做网站公司哪家好网站先做前端还是后台
  • wordpress关闭网站吗用织梦做的学校网站
  • 响应式网站建设平台东莞网站建设aj
  • 代码做网站的软件市场营销策划书
  • 东莞网站建设 手机壳文登建设局网站
  • 网站建设和后台空间管理关系企业网络需求分析
  • 做小说网站做国外域名还是国内的好温州市网站建设
  • wordpress识别手机跳转网站3d视频动画制作
  • 展示型企业网站设计方案邯郸市口碑网络技术有限公司
  • 网站配色案例泰州seo平台
  • wordpress标题title优化代码seo技术顾问
  • 怎么做直播网站的超管延安免费做网站
  • 织梦做手机网站hao123从网上开始
  • 网站制作公司十强重庆网站建设mlfart
  • 南京调查公司网站杭州一起做网站
  • 不关站备案wordpress内网网站模板
  • 做学术用的网站如果在各大网站做免费的网络推广
  • 设计素材网站线上网站数据报表
  • 做一个小型网站多少钱wordpress 手机商城模板
  • 谷歌网站收录提交金山网站建设关键词排名
  • 域名备案中网站可以开通个人网站开发多少钱
  • 西安维护网站广州公司网站设计制作
  • 荆门做网站网络推广公司多久能回本
  • 搜索网站存在的关键字室内设计公司排名榜
  • 响应式网页开发昆明网站排名优化公司哪家好
  • 如东建设局网站线上购物平台
  • 重庆网站推广营销淘宝的网站怎么做的好
  • 重庆企业建站模板珠海企业官网设计制作
  • 网页作图软件东莞优化哪家好