天天看點

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

作者:Java架構嘻嘻嘻

每次聊到代碼優化,都會有很多人說理論、架構、核心思路,其實我覺得代碼優化這事說簡單了很簡單,說複雜了吧它也有一定的難度,但是我覺得有一個良好的編碼習慣很重要,下面分享一下14個springboot項目中優化代碼的小技巧,讓代碼優化跟容易,就像完成一件小事。

1. 定義配置檔案資訊

有時候我們為了統一管理會把一些變量放到 yml 配置檔案中

例如

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

用 @ConfigurationProperties 代替 @Value

使用方法

定義對應字段的實體

@Data
// 指定字首
@ConfigurationProperties(prefix = "developer")
@Component
public class DeveloperProperty {
private String name;
private String website;
private String qq;
private String phoneNumber;
}           
@Data
// 指定字首
@ConfigurationProperties(prefix = "developer")
@Component
public class DeveloperProperty {
private String name;
private String website;
private String qq;
private String phoneNumber;
}           

使用時注入這個bean

@RestController
@RequiredArgsConstructor
public class PropertyController {

final DeveloperProperty developerProperty;

@GetMapping("/property")
public Object index() {
return developerProperty.getName();
}
}           

2. 用@RequiredArgsConstructor代替@Autowired

我們都知道注入一個 bean 有三種方式哦(set 注入, 構造器注入, 注解注入),Spring 推薦我們使用構造器的方式注入 Bean,我們來看看上段代碼編譯完之後的樣子

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

RequiredArgsConstructor:lombok提供

3.代碼子產品化

阿裡巴巴 Java 開發手冊中說到每個方法的代碼不要超過 50 行(我沒記錯的話),手冊:https://www.yoodb.com/deployment/handbook/alibaba-java-specification.html

,在實際的開發中我們要善于拆分自己的接口或方法, 做到一個方法隻處理一種邏輯, 說不定以後某個功能就用到了, 拿來即用。

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

4. 抛異常而不是傳回

在寫業務代碼的時候,經常會根據不同的結果傳回不同的資訊,盡量減少傳回,會顯得代碼比較亂。

反例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

正例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

5. 減少不必要的db

盡可能的減少對資料庫的查詢,面試推薦公衆 号Java精選,回複java面試,擷取面試資料,支援線上刷題。

舉例子

删除一個服務(已下架或未上架的才能删除),之前有看别人寫的代碼,會先根據id查詢該記錄,然後做一些判斷。

反例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

正例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

6. 不要傳回 null

反例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

正例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

别處調用方法時,避免不必要的空指針

7. if else

不要太多了if else if,可以試試政策模式代替

8. 減少controller業務代碼

業務代碼盡量放到service層進行處理,後期維護起來也好操作而且美觀。

反例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

正例

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

9. 利用好Idea

目前為止市面上的企業基本都用idea作為開發工具了吧。

舉一個小例子

idea會對我們的代碼進行判斷,提出合理的建議

例如

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

它推薦我們用lanbda的形式代替,點選replace

14個SpringBoot優化小妙招,看完後同僚說寫代碼像寫詩

10. 閱讀源碼

一定要養成閱讀源碼的好習慣包括優秀的開源項目GitHub上stars:>1000, 會從中學好好多知識包括其對代碼的設計思想以及進階API,面試加分(好多面試官習慣問源碼相關的知識,推薦公衆 号Java精選,回複java面試,擷取面試資料,支援線上刷題)

11. 設計模式

23種設計模式,要嘗試代碼中運用設計模式思想,寫出的代碼即規範又美觀還高大上哈哈。

12. 擁抱新知識

像我們這種工作年限少的程式員,我覺得要多學習自己認知之外的知識,不能每天crud,有機會就多用用有點難度的知識,沒有機會(項目較傳統),可以自己下班多些相關demo練習

13. 基礎問題

map周遊

HashMap<String, String> map = new HashMap<>();
map.put("name", "du");
for (String key : map.keySet()) {
String value = map.get(key);
}

map.forEach((k, v) -> {
});

// 推薦
for (Map.Entry<String, String> entry : map.entrySet()) {
}           

optional 判空

//擷取子目錄清單
public List<CatalogueTreeNode> getChild(String pid) {
if (V.isEmpty(pid)) {
pid = BasicDic.TEMPORARY_DIRECTORY_ROOT;
}
CatalogueTreeNode node = treeNodeMap.get(pid);
return Optional.ofNullable(node)
.map(CatalogueTreeNode::getChild)
.orElse(Collections.emptyList());
}           

遞歸

大資料量的遞歸時,避免在遞歸方法裡new對象,可以試試把對象當作方法參數進行傳遞使用

注釋

類 接口方法 注解 較複雜的方法 注釋都要寫而且要寫清楚, 有時候寫注釋不是給别人看的 而是給自己看的

14. 判斷元素是否存在

hashSet 而不是 list,list 判斷一個元素是否存在的代碼

ArrayList<String> list = new ArrayList<>();

// 判斷a是否在list中

for (int i = 0; i < list.size(); i++)
if ("a".equals(elementData[i]))
return i;           

由此可見其複雜度為On,而hashSet底層采用hashMap作為資料結構進行存儲,元素都放到map的key(即連結清單中)

HashSet<String> set = new HashSet<>();
// 判斷a是否在set中
int index = hash(a);
return getNode(index) != null           

作者:國濤i

來源:blog.csdn.net/weixin_44912855/article/details/120866194