在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot程序優(yōu)化的14個(gè)小妙招!

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-25 10:24 ? 次閱讀


把自己平時(shí)寫代碼的習(xí)慣跟大家分享一下

1.定義配置文件信息

有時(shí)候我們?yōu)榱私y(tǒng)一管理會(huì)把一些變量放到y(tǒng)ml配置文件中

例如

12556bc0-6c66-11ed-8abf-dac502259ad0.png

用 @ConfigurationProperties 代替@Value

使用方法

定義對(duì)應(yīng)字段的實(shí)體

@Data
//指定前綴
@ConfigurationProperties(prefix="developer")
@Component
publicclassDeveloperProperty{
privateStringname;
privateStringwebsite;
privateStringqq;
privateStringphoneNumber;
}

使用時(shí)注入這個(gè)bean

@RestController
@RequiredArgsConstructor
publicclassPropertyController{

finalDeveloperPropertydeveloperProperty;

@GetMapping("/property")
publicObjectindex(){
returndeveloperProperty.getName();
}
}

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

2. 用@RequiredArgsConstructor代替@Autowired

我們都知道注入一個(gè)bean有三種方式哦(set注入, 構(gòu)造器注入, 注解注入),spring推薦我們使用構(gòu)造器的方式注入Bean

我們來看看上段代碼編譯完之后的樣子

1262038a-6c66-11ed-8abf-dac502259ad0.png

RequiredArgsConstructor:lombok提供

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

3.代碼模塊化

阿里巴巴Java開發(fā)手冊(cè)中說到每個(gè)方法的代碼不要超過50行(我沒記錯(cuò)的話)

在實(shí)際的開發(fā)中我們要善于拆分自己的接口或方法, 做到一個(gè)方法只處理一種邏輯, 說不定以后某個(gè)功能就用到了, 拿來即用

126fe694-6c66-11ed-8abf-dac502259ad0.png

4. 拋異常而不是返回

在寫業(yè)務(wù)代碼的時(shí)候,經(jīng)常會(huì)根據(jù)不同的結(jié)果返回不同的信息,盡量減少返回,會(huì)顯得代碼比較亂

反例

127c5a82-6c66-11ed-8abf-dac502259ad0.png

正例

12898248-6c66-11ed-8abf-dac502259ad0.png

5. 減少不必要的db

盡可能的減少對(duì)數(shù)據(jù)庫的查詢

舉例子

刪除一個(gè)服務(wù)(已下架或未上架的才能刪除)

之前有看別人寫的代碼,會(huì)先根據(jù)id查詢?cè)撚涗洠缓笞鲆恍┡袛?/p>

反例

1294876a-6c66-11ed-8abf-dac502259ad0.png

正例

12a8a18c-6c66-11ed-8abf-dac502259ad0.png

6. 不要返回null

反例

12b3e470-6c66-11ed-8abf-dac502259ad0.png

正例

12c5d0f4-6c66-11ed-8abf-dac502259ad0.png

別處調(diào)用方法時(shí),避免不必要的空指針

7. if else

不要太多了if else if

可以試試策略模式代替

8. 減少controller業(yè)務(wù)代碼

業(yè)務(wù)代碼盡量放到service層進(jìn)行處理,后期維護(hù)起來也好操作而且美觀

反例

12dfbaaa-6c66-11ed-8abf-dac502259ad0.png

正例

12f3e46c-6c66-11ed-8abf-dac502259ad0.png

9. 利用好Idea

目前為止市面上的企業(yè)基本都用idea作為開發(fā)工具了吧

舉一個(gè)小例子

idea會(huì)對(duì)我們的代碼進(jìn)行判斷,提出合理的建議

例如:

130dc72e-6c66-11ed-8abf-dac502259ad0.png

它推薦我們用lanbda的形式代替

點(diǎn)擊replace

1318b8c8-6c66-11ed-8abf-dac502259ad0.png

10. 閱讀源碼

一定要養(yǎng)成閱讀源碼的好習(xí)慣包括優(yōu)秀的開源項(xiàng)目GitHub上stars:>1000, 會(huì)從中學(xué)好好多知識(shí)包括其對(duì)代碼的設(shè)計(jì)思想以及高級(jí)API,面試加分(好多面試官習(xí)慣問源碼相關(guān)的知識(shí))

11. 設(shè)計(jì)模式

23種設(shè)計(jì)模式,要嘗試代碼中運(yùn)用設(shè)計(jì)模式思想,寫出的代碼即規(guī)范又美觀還高大上哈哈。

12. 擁抱新知識(shí)

像我們這種工作年限少的程序員,我覺得要多學(xué)習(xí)自己認(rèn)知之外的知識(shí),不能每天crud,有機(jī)會(huì)就多用用有點(diǎn)難度的知識(shí),沒有機(jī)會(huì)(項(xiàng)目較傳統(tǒng)),可以自己下班多些相關(guān)demo練習(xí)

13. 基礎(chǔ)問題

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());
}

遞歸

大數(shù)據(jù)量的遞歸時(shí),避免在遞歸方法里new對(duì)象,可以試試把對(duì)象當(dāng)作方法參數(shù)進(jìn)行傳遞使用

注釋

類 接口方法 注解 較復(fù)雜的方法 注釋都要寫而且要寫清楚, 有時(shí)候?qū)懽⑨尣皇墙o別人看的 而是給自己看的

14. 判斷元素是否存在

hashSet而不是list

list判斷一個(gè)元素是否存在的代碼

ArrayListlist=newArrayList<>();

//判斷a是否在list中

for(inti=0;iif("a".equals(elementData[i]))
returni;

由此可見其復(fù)雜度為On

而hashSet底層采用hashMap作為數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲(chǔ),元素都放到map的key(即鏈表中)

HashSetset=newHashSet<>();

//判斷a是否在set中

intindex=hash(a);

returngetNode(index)!=null

由此可見其復(fù)雜度為O1

待補(bǔ)充....



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68612
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14343

原文標(biāo)題:Spring Boot 程序優(yōu)化的 14 個(gè)小妙招!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    校園點(diǎn)餐訂餐外賣跑腿Java源碼

    創(chuàng)建一個(gè)校園點(diǎn)餐訂餐外賣跑腿系統(tǒng)是一個(gè)復(fù)雜的項(xiàng)目,涉及到前端、后端、數(shù)據(jù)庫設(shè)計(jì)等多個(gè)方面。在這里,我可以提供一個(gè)簡化的Java后端示例,使用Spring
    的頭像 發(fā)表于 12-24 14:55 ?100次閱讀
    校園點(diǎn)餐訂餐外賣跑腿Java源碼

    SSM框架的性能優(yōu)化技巧 SSM框架中RESTful API的實(shí)現(xiàn)

    SSM框架的性能優(yōu)化技巧 SSM(Spring + Spring MVC + MyBatis)框架的性能優(yōu)化是提升Java Web應(yīng)用性能的關(guān)鍵環(huán)節(jié)。以下是一些常用的性能
    的頭像 發(fā)表于 12-17 09:10 ?162次閱讀

    SSM開發(fā)環(huán)境的搭建教程 SSM與Spring Boot的區(qū)別

    SSM開發(fā)環(huán)境的搭建教程 SSM(Spring+SpringMVC+MyBatis)開發(fā)環(huán)境的搭建涉及多個(gè)步驟,以下是詳細(xì)的教程: 創(chuàng)建Maven項(xiàng)目 : 使用Maven工具創(chuàng)建一個(gè)新的Maven
    的頭像 發(fā)表于 12-16 18:13 ?449次閱讀

    Spring 應(yīng)用合并之路(二):峰回路轉(zhuǎn),柳暗花明

    提醒下,決定拋開 Spring Boot 內(nèi)置的父子容器方案,完全自己實(shí)現(xiàn)父子容器。 如何加載 web 項(xiàng)目? 現(xiàn)在的難題只有一個(gè):如何加載 web 項(xiàng)目?加載完成后,如何持續(xù)持有 web 項(xiàng)目?經(jīng)過思考后,可以創(chuàng)建一
    的頭像 發(fā)表于 12-12 11:22 ?728次閱讀

    Spring事務(wù)實(shí)現(xiàn)原理

    作者:京東零售 范錫軍 1、引言 springspring-tx模塊提供了對(duì)事務(wù)管理支持,使用spring事務(wù)可以讓我們從復(fù)雜的事務(wù)處理中得到解脫,無需要去處理獲得連接、關(guān)閉連接、事務(wù)提交和回滾等
    的頭像 發(fā)表于 11-08 10:10 ?824次閱讀
    <b class='flag-5'>Spring</b>事務(wù)實(shí)現(xiàn)原理

    使用TPS65023-Q1優(yōu)化OMAP3630 BOOT序列

    電子發(fā)燒友網(wǎng)站提供《使用TPS65023-Q1優(yōu)化OMAP3630 BOOT序列.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 10:59 ?0次下載
    使用TPS65023-Q1<b class='flag-5'>優(yōu)化</b>OMAP3630 <b class='flag-5'>BOOT</b>序列

    Spring Cloud Gateway網(wǎng)關(guān)框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進(jìn)行構(gòu)建; (2) 動(dòng)態(tài)路由:能夠匹配任何請(qǐng)求屬性;
    的頭像 發(fā)表于 08-22 09:58 ?494次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網(wǎng)關(guān)框架

    單片機(jī)boot0和boot1怎么設(shè)置

    單片機(jī)Boot0和Boot1簡介 Boot0和Boot1是單片機(jī)啟動(dòng)模式選擇引腳,用于選擇單片機(jī)的啟動(dòng)模式。 Boot0和
    的頭像 發(fā)表于 08-22 09:50 ?2543次閱讀

    stm32boot0和boot1對(duì)應(yīng)哪個(gè)p引腳

    STM32系列微控制器是一種廣泛應(yīng)用于嵌入式系統(tǒng)領(lǐng)域的32位微控制器。在STM32系列微控制器中,BOOT0和BOOT1是兩個(gè)重要的引腳,它們用于設(shè)置設(shè)備的啟動(dòng)模式。 首先,讓我們了解STM32系列
    的頭像 發(fā)表于 08-22 09:40 ?3087次閱讀

    vue+spring boot人員定位系統(tǒng)源碼,實(shí)現(xiàn)實(shí)時(shí)定位、智慧調(diào)度、軌跡追蹤

    、機(jī)具、物料上定位標(biāo)簽回傳的位置信息數(shù)據(jù),采用多維定位模式,精確定位人、機(jī)具、物料的實(shí)時(shí)位置,實(shí)現(xiàn)實(shí)時(shí)定位、物料標(biāo)簽配置、智慧調(diào)度、軌跡追蹤、工時(shí)統(tǒng)計(jì)、區(qū)域物料統(tǒng)計(jì)、電子圍欄等應(yīng)用功能。 技術(shù)架構(gòu):java+ spring boot+ v
    的頭像 發(fā)表于 08-08 14:27 ?699次閱讀
    vue+<b class='flag-5'>spring</b> <b class='flag-5'>boot</b>人員定位系統(tǒng)源碼,實(shí)現(xiàn)實(shí)時(shí)定位、智慧調(diào)度、軌跡追蹤

    玩轉(zhuǎn)Spring狀態(tài)機(jī)

    說起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式中狀態(tài)模式的區(qū)別是啥呢?沒錯(cuò),Spring狀態(tài)機(jī)就是狀態(tài)模式的一種實(shí)現(xiàn),在介紹Spring狀態(tài)機(jī)之前,讓我們來看看設(shè)計(jì)模式中的狀態(tài)模式
    的頭像 發(fā)表于 06-25 14:21 ?953次閱讀
    玩轉(zhuǎn)<b class='flag-5'>Spring</b>狀態(tài)機(jī)

    STM32G070RBT6將PA14-BOOT0改為USART,無法識(shí)別到ID也不能下載程序了,怎么解決?

    芯片型號(hào)為:STM32G070RBT6 遇到的問題:我將MCU PA14-BOOT0改為USART2RX,第一次是可以下載進(jìn)去程序的,因?yàn)槔锩媸强盏模梢宰R(shí)別到也能正常下載程序,我將我編寫的
    發(fā)表于 05-27 07:44

    用STM32進(jìn)行bootloader開發(fā)時(shí),能不能將boot和app程序的hex合成為一個(gè)hex進(jìn)行燒錄?

    大家好,請(qǐng)問用STM32進(jìn)行bootloader開發(fā)時(shí),能不能將boot和app程序的hex合成為一個(gè)hex進(jìn)行燒錄?我之前分別燒錄兩個(gè)hex,是可以實(shí)現(xiàn)功能的,不知道合成一
    發(fā)表于 04-01 08:20

    SpingBoot的5個(gè)擴(kuò)展點(diǎn),超級(jí)實(shí)用!

    我們?cè)趩?dòng)Spring Boot項(xiàng)目的時(shí)候,是執(zhí)行這樣一個(gè)方法來啟動(dòng)的
    的頭像 發(fā)表于 02-22 11:28 ?470次閱讀
    SpingBoot的5<b class='flag-5'>個(gè)</b>擴(kuò)展點(diǎn),超級(jí)實(shí)用!

    使用Spring Boot 3.2虛擬線程搭建靜態(tài)文件服務(wù)器

    Spring Boot 3.2 于 2023 年 11 月大張旗鼓地發(fā)布,標(biāo)志著 Java 開發(fā)領(lǐng)域的一個(gè)關(guān)鍵時(shí)刻。這一突破性的版本引入了一系列革命性的功能。
    的頭像 發(fā)表于 01-09 09:34 ?1126次閱讀
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 3.2虛擬線程搭建靜態(tài)文件服務(wù)器
    主站蜘蛛池模板: 久久思re热9一区二区三区| 2019天天操天天干天天透| 日本加勒比黑人| 国产精品片| 亚洲一区免费在线| 亭亭色| 日本成片视频| 亚洲 欧美 自拍 另类 欧美| 成人啪啪免费视频| 色多多视频在线观看| 久综合网| 久久大综合| 丁香激情六月| 三级网站视频| 天天爽夜夜爽人人爽免费| 56pao强力打造| 天堂免费视频| 永久免费在线观看视频| 狠狠色综合色综合网络| 一级毛片aaaaaa免费看| 日本三级黄色网址| 成人a毛片免费全部播放| 免费啪| 热re99久久精品国产99热| 四虎影院在线免费观看| 在线免费国产| 欧美性色xo影院永久禁欲| 看黄色一级毛片| bt天堂在线观看| 色妞在线| 最新大黄网站免费| 成人夜夜嗨| 日日噜噜噜夜夜爽爽狠狠| 日本色视| 性欧美高清| 天天狠狠操| 亚洲天堂首页| 国产色丁香久久综合| 九九视频只有精品| 特黄特色三级在线播放| 未满十八18周岁禁止免费国产|