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

news2024/10/3 4:31:54

1.定义配置文件信息

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

例如

图片

用 @ConfigurationProperties 代替@Value

使用方法

定义对应字段的实体

@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

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

图片

RequiredArgsConstructor:lombok提供

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遍历

        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

由此可见其复杂度为O1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据看板是什么?

一 数据看板定义 数据看板是数据可视化的载体。数据看板是一个可视化工具&#xff0c;通过合理的页面布局、效果设计&#xff0c;将可视化数据更直观、更形象的展现出来&#xff1b;数据看板是一个交流工具&#xff0c;通过数据公开和呈现&#xff0c;公司内部能够共享有效信息…

大二学生基于Html+Css+javascript的网页制作——动漫设计公司响应式网站模板 (10个页面)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

JAVAWEB_实验二 JSP 的内置对象

文章目录一、Part 1 JSP 的内置对象一、实验目的二、实验要求三、实验内容二、Part 2 JSP 的内置对象一、实验目的二、实验要求三、实验内容思考&#xff1a;页面重定向有哪些方式&#xff1f;区别时什么&#xff1f;一、Part 1 JSP 的内置对象 一、实验目的 通过编程和上机实…

算法刷题打卡第33天:香槟塔

香槟塔 难度&#xff1a;中等 我们把玻璃杯摆成金字塔的形状&#xff0c;其中第一层有 1 个玻璃杯&#xff0c;第二层有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满…

【JavaWeb】Servlet系列 --- 使用纯Servlet做一个单表的CRUD操作(oa小项目,超详细笔记)

使用纯Servlet做一个单表的CRUD操作实现步骤第一步&#xff1a;准备一张数据库表&#xff08;sql脚本/可视化工具&#xff09;第二步&#xff1a;准备一套HTML页面&#xff08;页面原型&#xff09;【前端开发工具使用vscode / IDEA】第三步&#xff1a;分析我们这个系统包括哪…

分布式共识协议 Raft 是如何工作的?

Raft 解决的问题 提供一种共识算法&#xff08;分布式一致性算法&#xff09;。 Paxos是早先的一个分布式共识算法&#xff0c;Paxos 逻辑复杂而难以理解和实现。相比早先的 Paxos&#xff0c; Raft 提供一个容易理解和实现的共识算法&#xff0c;在很多的系统比如 etcd, ozon…

力扣hot100——第3天:11盛最多水的容器、21合并两个有序链表、22括号生成

文章目录1.11盛最多水的容器1.1.题目1.2.解答1.2.1.题解1.2.2.自己对参考题解的进一步解释2.21合并两个有序链表2.1.题目2.2.题解3.22括号生成3.1.题目3.2.题解1.11盛最多水的容器 参考&#xff1a;力扣题目链接&#xff1b;题解 1.1.题目 1.2.解答 1.2.1.题解 这道题目可以…

GIS工具maptalks开发手册(一)——hello world初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.…

微信小程序实战十四:小程序及APP端实现客服功能

文章目录 1.效果预览2.小程序后台添加客服3.小程序代码中集成客服4.APP中添加客服5.企业微信登陆6.获取企业ID值7.设置多客服说明:项目用uni开发的,有小程序版本和APP版本,最开始项目中集成了第三方美洽的客服,2个客服一年收3600,老哥咨询我是否有稍微优惠点的方案,老哥带…

QuEra将研发可重构中性原子量子计算机

&#xff08;图片来源&#xff1a;网络&#xff09; 上个月&#xff0c;借助Amazon Braket&#xff0c;QuEra Computing开始提供对其中性原子量子系统Aquila的访问, Aquila具有256个量子比特。如今&#xff0c;量子公司的数量与日俱增&#xff0c;QuEra是其中之一&#xff0c;它…

java httpclient的digest验证(可恨,找遍全网没有靠谱的,不是少包就是少文件。含泪整理o(╥﹏╥)o~~~~)

背景&#xff1a;调用第三方接口&#xff0c;使用的是digest auth鉴权方式&#xff0c; basic auth和digest auth比较&#xff1a; basic认证是把用户和密码通过base64加密后发送给服务器进行验证。 Basic认证过程简单&#xff0c;每次请求都有发送密码。安全性较低。 为了解决…

[附源码]JAVA毕业设计衡师社团管理系统(系统+LW)

[附源码]JAVA毕业设计衡师社团管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【allegro 17.4软件操作保姆级教程八】布线操作基础之三

目录 1.1扇出操作 1.2差分对过孔间距调整 1.3差分线换层自动添加回流过孔 1.4多人协同操作 1.5导入pin delay 1.6走线导圆弧 1.1扇出操作 关于信号扇出有如下一些需要注意的点&#xff1a; 1、过孔扇出要考虑其间距&#xff0c;要求2个过孔之间保证能过一根信号线&#x…

java+jsp基于ssm的校园OTO超市系统-计算机毕业设计

项目介绍 本网站主要是针对高校学生以超市购物为重点开发的网站。系统从用户上分为三种&#xff1a;卖家、买家和游客。系统从模块分为买家模块和卖家模块&#xff0c;买家模块包括用户注册登录、商品浏览、商品详情、商品加入购物车、购物车中商品删除、购物车商品数量变更、…

vue 微信登录

文章目录前言一、第一步用户授权获取code1、PC扫码方式一方式二&#xff1a;踩坑记录2、移动端微信内置浏览器授权获取code二、第二步 通过code获取access_token三、获取用户个人信息前言 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信…

没想到吧,Spring中还有一招集合注入的写法

Spring作为项目中不可缺少的底层框架&#xff0c;提供的最基础的功能就是bean的管理了。bean的注入相信大家都比较熟悉了&#xff0c;但是有几种不太常用到的集合注入方式&#xff0c;可能有的同学会不太了解&#xff0c;今天我们就通过实例看看它的使用。 首先&#xff0c;声…

[附源码]JAVA毕业设计衡水特产展销系统(系统+LW)

[附源码]JAVA毕业设计衡水特产展销系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

正则匹配删除指令

// 删除以 SameSeed 开头的整行 ^SameSeed.*$执行前&#xff1a; 执行后&#xff1a; 这样我们就可以在代码发布时删除代码中所有的调试信息&#xff0c;使代码中不包含任何 DEADCODE&#xff0c;但这样会导致一个问题&#xff0c;就是会出现一个空行&#xff0c;同时代码中…

生命在于学习——docker逃逸

注意&#xff1a;本篇文章仅用于学习记录&#xff0c;不得用于其他用途。 一、docker逃逸 docker逃逸就是从当前docker容器权限中逃逸出来&#xff0c;获得宿主机的权限。 二、常见的逃逸方法 1、配置不当引起的逃逸 &#xff08;1&#xff09;Docker Remote API未授权访问…

jsp汽车租赁管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车租赁管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库sqlserver2008&#xff…