把自己平時寫代碼的習慣跟大家分享一下
1.定義配置文件信息
有時候我們為了統一管理會把一些變量放到yml配置文件中
例如
用 @ConfigurationProperties 代替@Value
使用方法
定義對應字段的實體
@Data
//指定前綴
@ConfigurationProperties(prefix="developer")
@Component
publicclassDeveloperProperty{
privateStringname;
privateStringwebsite;
privateStringqq;
privateStringphoneNumber;
}
使用時注入這個bean
@RestController
@RequiredArgsConstructor
publicclassPropertyController{
finalDeveloperPropertydeveloperProperty;
@GetMapping("/property")
publicObjectindex(){
returndeveloperProperty.getName();
}
}
基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
- 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 視頻教程:https://doc.iocoder.cn/video/
2. 用@RequiredArgsConstructor代替@Autowired
我們都知道注入一個bean有三種方式哦(set注入, 構造器注入, 注解注入),spring推薦我們使用構造器的方式注入Bean
我們來看看上段代碼編譯完之后的樣子
RequiredArgsConstructor:lombok提供
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
3.代碼模塊化
阿里巴巴Java開發手冊中說到每個方法的代碼不要超過50行(我沒記錯的話)
在實際的開發中我們要善于拆分自己的接口或方法, 做到一個方法只處理一種邏輯, 說不定以后某個功能就用到了, 拿來即用
4. 拋異常而不是返回
在寫業務代碼的時候,經常會根據不同的結果返回不同的信息,盡量減少返回,會顯得代碼比較亂
反例
正例
5. 減少不必要的db
盡可能的減少對數據庫的查詢
舉例子
刪除一個服務(已下架或未上架的才能刪除)
之前有看別人寫的代碼,會先根據id查詢該記錄,然后做一些判斷
反例
正例
6. 不要返回null
反例
正例
別處調用方法時,避免不必要的空指針
7. if else
不要太多了if else if
可以試試策略模式代替
8. 減少controller業務代碼
業務代碼盡量放到service層進行處理,后期維護起來也好操作而且美觀
反例
正例
9. 利用好Idea
目前為止市面上的企業基本都用idea作為開發工具了吧
舉一個小例子
idea會對我們的代碼進行判斷,提出合理的建議
例如:
它推薦我們用lanbda的形式代替
點擊replace
10. 閱讀源碼
一定要養成閱讀源碼的好習慣包括優秀的開源項目GitHub上stars:>1000, 會從中學好好多知識包括其對代碼的設計思想以及高級API,面試加分(好多面試官習慣問源碼相關的知識)
11. 設計模式
23種設計模式,要嘗試代碼中運用設計模式思想,寫出的代碼即規范又美觀還高大上哈哈。
12. 擁抱新知識
像我們這種工作年限少的程序員,我覺得要多學習自己認知之外的知識,不能每天crud,有機會就多用用有點難度的知識,沒有機會(項目較傳統),可以自己下班多些相關demo練習
13. 基礎問題
map遍歷
HashMapmap=newHashMap<>();
map.put("name","du");
for(Stringkey:map.keySet()){
Stringvalue=map.get(key);
}
map.forEach((k,v)->{
});
//推薦
for(Map.Entryentry:map.entrySet()){
}
optional 判空
//獲取子目錄列表
publicListgetChild(Stringpid) {
if(V.isEmpty(pid)){
pid=BasicDic.TEMPORARY_DIRECTORY_ROOT;
}
CatalogueTreeNodenode=treeNodeMap.get(pid);
returnOptional.ofNullable(node)
.map(CatalogueTreeNode::getChild)
.orElse(Collections.emptyList());
}
遞歸
“大數據量的遞歸時,避免在遞歸方法里new對象,可以試試把對象當作方法參數進行傳遞使用
注釋
“類 接口方法 注解 較復雜的方法 注釋都要寫而且要寫清楚, 有時候寫注釋不是給別人看的 而是給自己看的
14. 判斷元素是否存在
hashSet而不是list
list判斷一個元素是否存在的代碼
ArrayListlist=newArrayList<>();
//判斷a是否在list中
for(inti=0;iif("a".equals(elementData[i]))
returni;
由此可見其復雜度為On
而hashSet底層采用hashMap作為數據結構進行存儲,元素都放到map的key(即鏈表中)
HashSetset=newHashSet<>();
//判斷a是否在set中
intindex=hash(a);
returngetNode(index)!=null
由此可見其復雜度為O1
待補充....
審核編輯 :李倩
-
代碼
+關注
關注
30文章
4821瀏覽量
68882 -
spring
+關注
關注
0文章
340瀏覽量
14368
原文標題:Spring Boot 程序優化的 14 個小妙招!
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論