0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Boot程序优化的14个小妙招!

jf_ro2CN3Fa 来源:芋道源码 作者:芋道源码 2022-11-25 10:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


把自己平时写代码的习惯跟大家分享一下

1.定义配置文件信息

有时候我们为了统一管理会把一些变量放到yml配置文件中

例如

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

用 @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

我们来看看上段代码编译完之后的样子

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

RequiredArgsConstructor:lombok提供

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

3.代码模块化

阿里巴巴Java开发手册中说到每个方法的代码不要超过50行(我没记错的话)

在实际的开发中我们要善于拆分自己的接口或方法, 做到一个方法只处理一种逻辑, 说不定以后某个功能就用到了, 拿来即用

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

4. 抛异常而不是返回

在写业务代码的时候,经常会根据不同的结果返回不同的信息,尽量减少返回,会显得代码比较乱

反例

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

正例

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

5. 减少不必要的db

尽可能的减少对数据库的查询

举例子

删除一个服务(已下架或未上架的才能删除)

之前有看别人写的代码,会先根据id查询该记录,然后做一些判断

反例

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

别处调用方法时,避免不必要的空指针

7. if else

不要太多了if else if

可以试试策略模式代替

8. 减少controller业务代码

业务代码尽量放到service层进行处理,后期维护起来也好操作而且美观

反例

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

正例

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

9. 利用好Idea

目前为止市面上的企业基本都用idea作为开发工具了吧

举一个小例子

idea会对我们的代码进行判断,提出合理的建议

例如:

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

它推荐我们用lanbda的形式代替

点击replace

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

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;i< list.size(); i++)
       if("a".equals(elementData[i]))
returni;

由此可见其复杂度为On

而hashSet底层采用hashMap作为数据结构进行存储,元素都放到map的key(即链表中)

HashSetset=newHashSet<>();

//判断a是否在set中

intindex=hash(a);

returngetNode(index)!=null

由此可见其复杂度为O1

待补充....



审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74373
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    16052

原文标题:Spring Boot 程序优化的 14 个小妙招!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SGM5208-14/SGM5209-14:低功耗14位ADC的技术剖析与应用指南

    SGM5208-14/SGM5209-14:低功耗14位ADC的技术剖析与应用指南 在电子设计领域,模拟到数字的转换是一关键环节,它直接影响着系统的数据采集和处理能力。SGM5208
    的头像 发表于 03-12 09:30 345次阅读

    深入解析U-Boot image.c:RK平台镜像处理核心逻辑

    在瑞芯微(RK)平台的嵌入式开发中,U-Boot作为核心的启动加载程序,负责完成镜像解析、校验、加载等关键流程。而image.c正是U-Boot中处理镜像(uImage)的核心文件,尤其针对RK平台
    的头像 发表于 02-24 16:46 1790次阅读
    深入解析U-<b class='flag-5'>Boot</b> image.c:RK平台镜像处理核心逻辑

    U-Boot SPL核心文件spl.c深度解析:从启动流程到调试优化

    在嵌入式系统开发中,U-Boot 的 SPL(Secondary Program Loader)扮演着至关重要的角色,它是系统上电后执行的第一软件组件之一,负责为后续启动过程铺平道路。本文将深入
    的头像 发表于 02-05 14:08 428次阅读
    U-<b class='flag-5'>Boot</b> SPL核心文件spl.c深度解析:从启动流程到调试<b class='flag-5'>优化</b>

    深入解析U-Boot命令处理核心文件:功能、调试与开发价值

    在嵌入式系统开发中,U-Boot 作为主流的引导加载程序,其命令处理、交互逻辑和自动启动流程是核心功能模块。本文将围绕command.c、cli.c和autoboot.c三关键文件,从核心
    的头像 发表于 02-03 15:44 989次阅读
    深入解析U-<b class='flag-5'>Boot</b>命令处理核心文件:功能、调试与开发价值

    深入解析U-Boot核心文件board_f.c:知识点、调试要点与开发价值

    在嵌入式系统开发中,U-Boot 作为应用最广泛的引导程序,其底层初始化逻辑直接决定了硬件启动的稳定性与可靠性。
    的头像 发表于 02-03 15:38 863次阅读
    深入解析U-<b class='flag-5'>Boot</b>核心文件board_f.c:知识点、调试要点与开发价值

    解析Rockchip平台U-Boot核心文件:boot_rkimg.c到底做了什么?

    在嵌入式开发中,U-Boot 作为引导程序的 “中流砥柱”,负责初始化硬件、加载内核并启动系统。对于 Rockchip 平台的设备(如常见的开发板、智能终端),boot_rkimg.c 是 U-
    的头像 发表于 02-03 15:29 948次阅读
    解析Rockchip平台U-<b class='flag-5'>Boot</b>核心文件:<b class='flag-5'>boot</b>_rkimg.c到底做了什么?

    单片机大神的程序优化流程

    程序结构优化 1、程序的书写结构 虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该遵循一定的书写规则,一书写清晰、明了
    发表于 12-25 07:38

    深入理解 RK3506 U-Boot 重定位:从代码到原理

    在嵌入式系统中,U-Boot 作为引导加载程序,其启动流程的核心环节之一就是 重定位(Relocation) 。对于 RK3506 这类基于 ARM Cortex-A 架构的芯片,重定位的本质是将
    的头像 发表于 11-28 07:05 970次阅读
    深入理解 RK3506 U-<b class='flag-5'>Boot</b> 重定位:从代码到原理

    一款基于Java+Spring Boot+Vue的智慧随访管理系统源码

    智慧随访管理系统源码,一款基于Java+Spring Boot+Vue的B/S架构医院随访管理系统源码,采用前后端分离技术(Ant-Design+MySQL5),具有自主版权和落地案例。 随访管理
    的头像 发表于 11-13 15:38 505次阅读
    一款基于Java+<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>+Vue的智慧随访管理系统源码

    优化boot4的乘法运算周期

    可以在不同的时钟周期内完成,从而并行化运算流程,提高乘法器的运算性能。 采用多级压缩:在Boot4乘法器中,使用了基于连乘算法的多级压缩技术。可以通过增加多级压缩,进一步降低管理乘法器位宽度的开销,提升性能。 优化算法:在寻找算法优势的过程中,可以探索更好的算法和做法,使
    发表于 10-21 13:17

    优化boot4乘法器方法

    优化电路设计:在电路设计中,可以采用更快速的逻辑单元和存储器元件,优化关键路径和信号传输路线,从而降低延迟,缩短乘法器的运算周期。 固定位宽:Boot4乘法器可以处理不同位宽的数据,但是处理不同位宽
    发表于 10-21 12:13

    Spring拦截器:你的请求休想逃过我的五指山!

    Spring框架中,拦截器(Interceptor)是一种强大的机制,它允许开发者在请求处理的不同阶段插入自定义逻辑。WebApplicationContext作为Spring Web应用的上下文容器,为拦截器的配置和管理提供了基础支持。
    的头像 发表于 07-26 11:25 793次阅读
    <b class='flag-5'>Spring</b>拦截器:你的请求休想逃过我的五指山!

    10RTL优化实战技巧

    今天我给大家总结10实战级优化技巧,每条都有具体案例,助你从根源上搞定资源问题!
    的头像 发表于 07-21 15:01 1005次阅读

    IAP升级跳转APP跳转Boot失败了怎么解决?

    使用的MCU是STM32U535RC ,V6 编译器 跳转实现的功能如下 /** *@brief直接跳转到 Boot 程序 */ void LibJumpToBoot(UINT32
    发表于 07-21 06:15

    鸿蒙5开发宝藏案例分享---Web开发优化案例分享

    好的,老铁们!鸿蒙官方文档里其实藏着不少“硬核”性能优化案例,我之前愣是没发现,感觉错过了一亿!特别是关于 <span class=\"ne-text\"&
    发表于 06-12 17:20