关于代码评审使用的插件以及遇到的一些问题

       最近公司推动项目代码评审,如果用人一个个去看的话实在是太费事了,所以我的项目主管让使用了一个阿里的代码规范检查工具插件。下面先谈谈编码规约检查中遇到的问题,再讲插件的安装使用。

一、

1、System.currentTimeMillis()方法比new Date().getTime() 

获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime(); 说明:如果想获取更加精确的纳秒级时间值,用System.nanoTime。在JDK8中,针对统计时间等场景,推荐使用Instant类。                                                                                网上看了下,就是说System.currentTimeMillis()能取到毫秒数,并且执行效率高,而ew Date().getTime()没有它精确,并且很多人喜欢在同一个方法里面多次使用new Date(),通常性能就是这样一点一点地消耗掉。

2、Jpa方法过时 

//过时
Assert.notNull(entity);

//过时
Pageable pageable = new PageRequest(entity.getPage()-1,entity.getLimit(),sort);
//调整 
Pageable pageable =PageRequest.of(entity.getPage()-1,entity.getLimit(),sort);

//过时
Query query = em.createNativeQuery(sql.toString());
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
//调整
Query query = em.createNativeQuery(sql.toString());
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
//2020.01.07更正:当使用自己编写的SQL的语句时,query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) 无用会查询不出,注掉
//2020.02.20添加,当使用自己编写的SQL的语句时,要使用 query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);  这样返回的数据相当于map类型

//过时
Sort.Order order=new Sort.Order(Sort.Direction.DESC,"now()>fhandletime");
List list=new ArrayList();
    list.add(order);
Sort sort = new Sort(list);  
//调整
Sort sort = Sort.by(sortlist);

3、Beanutils使用问题

避免用Apache Beanutils进行属性的copy。 说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。                                                                                                                                                                    Cglib 的 BeanCopier 的拷贝速度是最快的,即使是百万次的拷贝也只需要 10 毫秒!相比而言,最差的是 Commons 包的 BeanUtils.copyProperties 方法,100 次拷贝测试与表现最好的 Cglib 相差 400 倍之多。百万次拷贝更是出现了 2800 倍的性能差异!                                                                                                                                                                                   CommonsBeanUtils 主要有以下几个耗时的地方:
1、输出了大量的日志调试信息
2、重复的对象类型检查 
3、类型转换 2800 倍的性能差异!                                                                                                                                                  不过,在修改使用 Spring 的 BeanUtils 的copyProperties方法时,要小心:从方法签名上可以看出,这两个工具类的名称相同,方法名也相同,甚至连参数个数、类型、名称都相同。但是参数的位置是相反的。

二、该插件由阿里巴巴 P3C 项目组研发。
代码已经开源,GitHub:https://github.com/alibaba/p3c
阿里介绍文章:https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd
插件支持了IDEA、Eclipse,在扫描代码后,将不符合规约的代码显示出来,甚至在 IDEA 上,还基于 Inspection 机制提供了实时检测功能,编写代码的同时也能快速发现问题所在,还实现了批量一键修复的功能。

1、IDEA安装                                                                                                                                                                                   选择File - Settings - Plugins - Browse repositories,查找Alibaba Java Coding Guidelines,安装,然后重启。

选中项目右击,会出现图中红框的两个按钮,也可以选中一个类或者在类里右键。或者按快捷键Ctrl+Shift+Alt+J

  Blocker/Critical/Major三个等级分别表示:崩溃/严重/重要,前两级别是必须要处理掉的。右侧窗口还有针对代码的批量修复功能。

2、Eclipse安装                                                                                                                                                                                   Eclipse 版插件支持4.2(Juno,JDK1.8+)及以上版本,我们提供自主的Update Site,通过 Help >> Install New Software 然后输入https://p3c.alibaba.com/plugin/eclipse/update
即可看到安装列表。大家可以通过 Help >> Check for Udates 进行插件新版检测

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值