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

    文章

    4788

    浏览量

    68607
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14343

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

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

收藏 人收藏

    评论

    相关推荐

    校园点餐订餐外卖跑腿Java源码

    创建一校园点餐订餐外卖跑腿系统是一复杂的项目,涉及到前端、后端、数据库设计等多个方面。在这里,我可以提供一简化的Java后端示例,使用Spring
    的头像 发表于 12-24 14:55 97次阅读
    校园点餐订餐外卖跑腿Java源码

    SSM框架的性能优化技巧 SSM框架中RESTful API的实现

    SSM框架的性能优化技巧 SSM(Spring + Spring MVC + MyBatis)框架的性能优化是提升Java Web应用性能的关键环节。以下是一些常用的性能
    的头像 发表于 12-17 09:10 161次阅读

    SSM开发环境的搭建教程 SSM与Spring Boot的区别

    SSM开发环境的搭建教程 SSM(Spring+SpringMVC+MyBatis)开发环境的搭建涉及多个步骤,以下是详细的教程: 创建Maven项目 : 使用Maven工具创建一新的Maven
    的头像 发表于 12-16 18:13 449次阅读

    Spring 应用合并之路(二):峰回路转,柳暗花明

    提醒下,决定抛开 Spring Boot 内置的父子容器方案,完全自己实现父子容器。 如何加载 web 项目? 现在的难题只有一:如何加载 web 项目?加载完成后,如何持续持有 web 项目?经过思考后,可以创建一
    的头像 发表于 12-12 11:22 728次阅读

    Spring事务实现原理

    作者:京东零售 范锡军 1、引言 springspring-tx模块提供了对事务管理支持,使用spring事务可以让我们从复杂的事务处理中得到解脱,无需要去处理获得连接、关闭连接、事务提交和回滚等
    的头像 发表于 11-08 10:10 824次阅读
    <b class='flag-5'>Spring</b>事务实现原理

    使用TPS65023-Q1优化OMAP3630 BOOT序列

    电子发烧友网站提供《使用TPS65023-Q1优化OMAP3630 BOOT序列.pdf》资料免费下载
    发表于 10-10 10:59 0次下载
    使用TPS65023-Q1<b class='flag-5'>优化</b>OMAP3630 <b class='flag-5'>BOOT</b>序列

    Spring Cloud Gateway网关框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建; (2) 动态路由:能够匹配任何请求属性;
    的头像 发表于 08-22 09:58 493次阅读
    <b class='flag-5'>Spring</b> Cloud Gateway网关框架

    单片机boot0和boot1怎么设置

    单片机Boot0和Boot1简介 Boot0和Boot1是单片机启动模式选择引脚,用于选择单片机的启动模式。 Boot0和
    的头像 发表于 08-22 09:50 2537次阅读

    stm32boot0和boot1对应哪个p引脚

    STM32系列微控制器是一种广泛应用于嵌入式系统领域的32位微控制器。在STM32系列微控制器中,BOOT0和BOOT1是两重要的引脚,它们用于设置设备的启动模式。 首先,让我们了解STM32系列
    的头像 发表于 08-22 09:40 3083次阅读

    vue+spring boot人员定位系统源码,实现实时定位、智慧调度、轨迹追踪

    、机具、物料上定位标签回传的位置信息数据,采用多维定位模式,精确定位人、机具、物料的实时位置,实现实时定位、物料标签配置、智慧调度、轨迹追踪、工时统计、区域物料统计、电子围栏等应用功能。 技术架构:java+ spring boot+ v
    的头像 发表于 08-08 14:27 698次阅读
    vue+<b class='flag-5'>spring</b> <b class='flag-5'>boot</b>人员定位系统源码,实现实时定位、智慧调度、轨迹追踪

    玩转Spring状态机

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式
    的头像 发表于 06-25 14:21 953次阅读
    玩转<b class='flag-5'>Spring</b>状态机

    STM32G070RBT6将PA14-BOOT0改为USART,无法识别到ID也不能下载程序了,怎么解决?

    芯片型号为:STM32G070RBT6 遇到的问题:我将MCU PA14-BOOT0改为USART2RX,第一次是可以下载进去程序的,因为里面是空的,可以识别到也能正常下载程序,我将我编写的
    发表于 05-27 07:44

    用STM32进行bootloader开发时,能不能将boot和app程序的hex合成为一hex进行烧录?

    大家好,请问用STM32进行bootloader开发时,能不能将boot和app程序的hex合成为一hex进行烧录?我之前分别烧录两hex,是可以实现功能的,不知道合成一
    发表于 04-01 08:20

    SpingBoot的5扩展点,超级实用!

    我们在启动Spring Boot项目的时候,是执行这样一方法来启动的
    的头像 发表于 02-22 11:28 470次阅读
    SpingBoot的5<b class='flag-5'>个</b>扩展点,超级实用!

    使用Spring Boot 3.2虚拟线程搭建静态文件服务器

    Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一关键时刻。这一突破性的版本引入了一系列革命性的功能。
    的头像 发表于 01-09 09:34 1126次阅读
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 3.2虚拟线程搭建静态文件服务器