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