[发明专利]从Java对象中存取属性值的方法、服务器及存储介质有效
申请号: | 201711037346.9 | 申请日: | 2017-10-30 |
公开(公告)号: | CN107766039B | 公开(公告)日: | 2020-04-10 |
发明(设计)人: | 张小松;毛才斐;李小培 | 申请(专利权)人: | 中国平安财产保险股份有限公司 |
主分类号: | G06F8/20 | 分类号: | G06F8/20 |
代理公司: | 深圳市君胜知识产权代理事务所(普通合伙) 44268 | 代理人: | 王永文;刘文求 |
地址: | 518000 广东省深*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | java 对象 存取 属性 方法 服务器 存储 介质 | ||
技术领域
本发明涉及应用程序技术领域,具体涉及从Java对象中存取属性值的方法、服务器及存储介质。
背景技术
在Java(一种面向对象的程序设计语言)程序中,经常需要使用表达式从一个DTO(数据传输对象)中存/取属性值。例设有个UserDTO,有个name属性字段(省略其它字段),每个字段都有对应的get/set方法用来存/取值(此为现有技术)。
场景1:在配置文件中配置校验规则“UserDTO.name=length:20”,校验之前需识别表达式“UserDTO.name”,从UserDTO对象中取name属性值。如果对象有多层结构,表达式也有多层,例如“UserDTO.name.firstName”。
场景2:不同系统的DTO不同、但要做数据交互,需要做DTO转换,可以通过配置文件配置对应关系“UserDTO.name=UserInfoDTO.userName”,DTO转换时需先获取UserDTO.name的值,再存到UserInfoDTO.userName中。
使用表达式从DTO中存/取属性值,业界常用的方案有以下两种:
一是开源工具OGNL(ObjectGraphicNavigationLanguage):早期使用广泛,容错性好。但由于开源工具OGNL内使用同步锁和java普通反射Method.invoke来调用字段的get和set方法,导致在高并发下性能较差。
二是开源工具Mvel(一个功能强大的基于Java应用程序的表达式语言):性能比开源工具OGNL好,但由于底层还是使用java普通反射Method.invoke来调用字段的get/set方法,比直接调用get/set的效率差10倍左右。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供一种从Java对象中存取属性值的方法、服务器及存储介质,提升了从数据传输对象中存/取属性值的效率,避免了高并发下的性能瓶颈;经实测、性能比开源工具OGNL快200倍,比开源工具Mvel快2倍以上;同时还明显降低了服务器CPU(Central Processing Unit)的消耗。
为了达到上述目的,本发明采取了以下技术方案:
一种从Java对象中存取属性值的方法,其包括如下步骤:
在配置文件中配置第一数据传输对象和第二数据传输对象中所有字段的属性对应关系;
对每一对属性对应关系,通过反射工具包来获取第一数据传输对象的属性值;
调用开源工具的取值方法获得参考属性值,将参考属性值与第一数据传输对象的属性值进行比较并输出比较结果;
当比较结果相同时,将第一数据传输对象的属性值转换为第二数据传输对象的数据类型,并设置到第二数据传输对象的属性中。
在所述的从Java对象中存取属性值的方法中,所述对每一对属性对应关系,通过反射工具包来获取第一数据传输对象的属性值的步骤包括:
使用反射工具包初始化第一数据传输对象对应的类的方法访问器对象;
使用分隔符对第一数据传输对象的所有表达式进行分割,获取该表达式的第一个属性项;
通过拼接得到该属性项的取出方法名,对该取出方法进行编号并获取对应项的属性值;
判断第二数据传输对象的表达式中是否还有属性项:若有,则获取该表达式的下一个属性项并返回前一步;没有则结束取值。
在所述的从Java对象中存取属性值的方法中,所述调用开源工具的取值方法获得参考属性值,将参考属性值与第一数据传输对象的属性值进行比较并输出比较结果的步骤包括:
根据第一数据传输对象的属性值和参考属性值的类型来比较对应的数据是否相同,将不同的字段名及其对应的值添加至返回结果散列表中;
若返回结果散列表不为空,输出返回结果散列表至错误日志中。
在所述的从Java对象中存取属性值的方法中,所述根据第一数据传输对象的属性值和参考属性值的类型来比较对应的数据是否相同的步骤包括:
若第一数据传输对象的属性值和参考属性值是数据类型,则比较第一数据传输对象的属性值和参考属性值的数据是否相等;
若第一数据传输对象的属性值和参考属性值是列表类型,则遍历两个列表中的每个元素,对列表中相同位置的值分别进行比较;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国平安财产保险股份有限公司,未经中国平安财产保险股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711037346.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种零添加酸牛奶及其制备工艺
- 下一篇:一种木糖醇酸奶及其制备工艺