關於代碼評審使用的插件以及遇到的一些問題

       最近公司推動項目代碼評審,如果用人一個個去看的話實在是太費事了,所以我的項目主管讓使用了一個阿里的代碼規範檢查工具插件。下面先談談編碼規約檢查中遇到的問題,再講插件的安裝使用。

一、

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 進行插件新版檢測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章