我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring常犯的十大错误具体是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring常犯的十大错误具体是什么

这篇文章给大家介绍Spring常犯的十大错误具体是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1、错误一:太过关注底层

我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见。

症状包括经常重写一些常见的代码,很多开发人员都有这种症状。虽然理解特定库的内部结构及其实现,在很大程度上是好的并且很有必要的(也可以是一个很好的学习过程),但作为软件工程师,不断地处理相同的底层实现细节对个人的开发生涯是有害的。

像 Spring 这种抽象框架的存在是有原因的,它将你从重复地手工劳作中解放出来,并允许你专注于更高层次的细节 —— 领域对象和业务逻辑。因此,接受抽象。

下次面对特定问题时,首先进行快速搜索,确定解决该问题的库是否已被集成到 Spring 中;

现在,你可能找到一个合适的现成解决方案。比如,一个很有用的库,在本文的其他部分,我将在示例中使用 Project Lombok 注解。Lombok 被用作样板代码生成器,希望懒惰的开发人员在熟悉这个库时不会遇到问题。

举个例子,看看使用 Lombok 的 “标准 Java Bean” 是什么样子的:如你所想,上述代码被编译为:但是,请注意,如果你打算在 IDE 中使用 Lombok,很可能需要安装一个插件,可在 此处 找到 Intellij IDEA 版本的插件。

2、错误二:内部结构 “泄露”

公开你的内部结构,从来都不是一个好主意,因为它在服务设计中造成了不灵活性,从而促进了不好的编码实践。“泄露” 的内部机制表现为使数据库结构可以从某些 API 端点访问。

例如,下面的 POJO(“Plain Old Java Object”)类表示数据库中的一个表:

假设,存在一个端点,他需要访问 TopTalentEntity 数据。返回 TopTalentEntity 实例可能很诱人,但更灵活的解决方案是创建一个新的类来表示 API 端点上的 TopTalentEntity 数据。

Spring常犯的十大错误具体是什么

这样,对数据库后端进行更改将不需要在服务层进行任何额外的更改。考虑下,在TopTalentEntity 中添加一个 “password” 字段来存储数据库中用户密码的 Hash 值 —— 如果没有 TopTalentData 之类的连接器,忘记更改服务前端,将会意外地暴露一些不必要的秘密信息。

3、错误三:缺乏关注点分离

随着程序规模的增长,逐渐地,代码组织成为一个越来越重要的问题。讽刺的是,大多数好的软件工程原则开始在规模上崩溃 —— 特别是在没有太多考虑程序体系结构设计的情况下。

开发人员最常犯的一个错误就是混淆代码关注点,这很容易做到!通常,打破 关注点分离 的是将新功能简单地 “倒” 在现有类中。当然,这是一个很好的短期解决方案(对于初学者来说,它需要更少的输入),但它也不可避免地会在将来成为一个问题,无论是在测试期间、维护期间还是介于两者之间。

考虑下下面的控制器,它将从数据库返回 TopTalentData。

Spring常犯的十大错误具体是什么

这种层次结构的另一个优点是,它允许我们通过检查类名来确定将功能驻留在何处。此外,在测试期间,如果需要,我们可以很容易地用模拟实现来替换任何类。

4、错误四:缺乏异常处理或处理不当

一致性的主题并非是 Spring(或 Java)所独有的,但仍然是处理 Spring 项目时需要考虑的一个重要方面。

虽然编码风格可能存在争议(通常团队或整个公司内部已达成一致),但拥有一个共同的标准最终会极大地提高生产力。对多人团队尤为如此;一致性允许交流发生,而不需要花费很多资源在手把手交接上,也不需要就不同类的职责提供冗长的解释。

考虑一个包含各种配置文件、服务和控制器的 Spring 项目。在命名时保持语义上的一致性,可以创建一个易于搜索的结构,任何新的开发人员都可以按照自己的方式管理代码;例如,将 Config 后缀添加到配置类,服务层以 Service 结尾,以及控制器用 Controller 结尾。

与一致性主题密切相关,服务器端的错误处理值得特别强调。如果你曾经不得不处理编写很差的 API 的异常响应,那你可能知道原因 —— 正确解析异常会是一件痛苦的事情,而确定这些异常最初发生的原因则更为痛苦。

作为一名 API 开发者,理想情况下你希望覆盖所有面向用户的端点,并将他们转换为常见的错误格式。这通常意味着有一个通用的错误代码和描述,而不是逃避解决问题:a) 返回一个 “500 Internal Server Error”信息。b) 直接返回异常的堆栈信息给用户。

(实际上,这些都应该不惜一切代价地去避免,因为除了客户端难以处理以外,它还暴露了你的内部信息)。例如,常见错误响应格式可能长这样:

Spring常犯的十大错误具体是什么

然而,上面的方法(除了构造很差以外)并不是一个真正 “干净” 的解决办法。我们正检查不止一种类型的有效性(即 TopTalentData 不得为空,TopTalentData.name 不得为空,且 TopTalentData.name 为 10 个字符长度),以及在数据无效时抛出异常。

通过在 Spring 中集成 Hibernate validator,数据校验可以更干净地进行。让我们首先重构 addTopTalent 方法来支持验证:

Spring常犯的十大错误具体是什么

Spring常犯的十大错误具体是什么

7、错误七:(依旧)使用基于xml的配置

虽然之前版本的 Spring 需要 XML,但如今大部分配置均可通过 Java 代码或注解来完成;XML 配置只是作为附加的不必要的样板代码。本文(及其附带的 GitHub 仓库)均使用注解来配置 Spring,Spring 知道应该连接哪些 Bean,因为待扫描的顶级包目录已在 @SpringBootApplication 复合注解中做了声明,如下所示:

Spring常犯的十大错误具体是什么

假设你不希望在修改代码时意外地对生产数据库进行任何操作,因此将默认配置文件设为 dev 是很有意义的。

然后,在服务器上,你可以通过提供 -Dspring.profiles.active=prod 参数给 JVM 来手动覆盖配置文件。另外,还可将操作系统的环境变量设置为所需的默认 profile。

9、错误九:无法接受依赖项注入

正确使用 Spring 的依赖注入意味着允许其通过扫描所有必须的配置类来将所有对象连接在一起;这对于解耦关系非常有用,也使测试变得更为容易,而不是通过类之间的紧耦合来做这样的事情:

Spring常犯的十大错误具体是什么

Misko Hevery 的 Google talk 深入解释了依赖注入的 “为什么”,所以,让我们看看它在实践中是如何使用的。

在关注点分离(常见错误 #3)一节中,我们创建了一个服务和控制器类。假设我们想在 TopTalentService 行为正确的前提下测试控制器。我们可以通过提供一个单独的配置类来插入一个模拟对象来代替实际的服务实现:

Spring常犯的十大错误具体是什么

之后,我们就可以使用上下文配置将 Bean 注入到单元测试中。

10、错误十:缺乏测试,或测试不当

尽管单元测试的概念已经存在很长时间了,但很多开发人员似乎要么 “忘记” 做这件事(特别是如果它不是 “必需” 的时候),要么只是在事后把它添加进来。

这显然是不可取的,因为测试不仅应该验证代码的正确性,还应该作为程序在不同场景下应如何表现的文档。在测试 Web 服务时,很少只进行 “纯” 单元测试,因为通过 HTTP 进行通信通常需要调用 Spring 的 DispatcherServlet,并查看当收到一个实际的 HttpServletRequest 时会发生什么(使它成为一个 “集成” 测试,处理验证、序列化等)。

REST Assured,一个用于简化测试REST服务的 Java DSL,在 MockMVC 之上,已经被证明提供了一个非常优雅的解决方案。考虑以下带有依赖项注入的代码片段:

Spring常犯的十大错误具体是什么

SampleUnitTestConfig 类将 TopTalentService 的模拟实现连接到 TopTalentController 中,而所有的其他类都是通过扫描应用类所在包的下级包目录来推断出的标准配置。RestAssuredMockMvc 只是用来设置一个轻量级环境,并向 /toptal/get 端点发送一个 GET请求。

关于Spring常犯的十大错误具体是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring常犯的十大错误具体是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring常犯的十大错误具体是什么

这篇文章给大家介绍Spring常犯的十大错误具体是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、错误一:太过关注底层我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见。症状包括经常重写
2023-06-19

Python程序员最常犯的十个错误分别是什么

本篇文章给大家分享的是有关Python程序员最常犯的十个错误分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。常见错误1:错误地将表达式作为函数的默认参数在Python中
2023-06-17

Java程序员常犯的错误是什么

这篇文章主要介绍“Java程序员常犯的错误是什么”,在日常操作中,相信很多人在Java程序员常犯的错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java程序员常犯的错误是什么”的疑惑有所帮助!接下来
2023-06-16

Java程序员容易犯的10大低级错误是什么

这篇文章主要介绍“Java程序员容易犯的10大低级错误是什么”,在日常操作中,相信很多人在Java程序员容易犯的10大低级错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java程序员容易犯的10大低
2023-06-17

Linux新手容易犯的7个错误是什么

本篇内容介绍了“Linux新手容易犯的7个错误是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!7. 选择错误的 Linux 发行版Lin
2023-06-16

新手站长租用韩国服务器时常犯的错误是什么

不了解韩国服务器的性能和稳定性:新手站长可能会选择便宜的韩国服务器,但这些服务器可能性能较差,容易出现故障和不稳定的情况。不熟悉韩国服务器的设置和操作:新手站长可能不了解如何正确设置和操作韩国服务器,导致服务器性能下降,影响网站的访问速度和
新手站长租用韩国服务器时常犯的错误是什么
2024-04-11

使用电脑的十大误区是什么

本篇内容主要讲解“使用电脑的十大误区是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用电脑的十大误区是什么”吧!误区一:重装系统对电脑损耗极大重装系统的损耗和玩游戏等操作相比,更多的损耗在
2023-06-28

JAVA语言的十个常见误解是什么

这篇“JAVA语言的十个常见误解是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JAVA语言的十个常见误解是什么”文章吧
2023-06-03

AdobeFlexBuilder3的七大新特性具体是什么

这篇文章给大家介绍AdobeFlexBuilder3的七大新特性具体是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。和大家重点讨论一下AdobeFlexBuilder3新功能,主要有七个部分。AdobeFlexBu
2023-06-17

Golang中最常见的错误是什么

这篇文章主要介绍“Golang中最常见的错误是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中最常见的错误是什么”文章能帮助大家解决问题。一、类型错误类型错误是Golang中最常见的
2023-07-05

ApacheSpark常见的三大误解分别是什么

ApacheSpark常见的三大误解分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ApacheSpark常见的三大误解误解一:Spark是一种内存技术  大家对S
2023-06-04

JavaScript常见的五个内存错误是什么

这篇文章主要介绍“JavaScript常见的五个内存错误是什么”,在日常操作中,相信很多人在JavaScript常见的五个内存错误是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript常见的
2023-06-26

C语言开发中的常见错误是什么

这篇“C语言开发中的常见错误是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言开发中的常见错误是什么”文章吧。一、编
2023-06-30

PHP 错误和异常的最佳实践是什么?

最佳php错误和异常管理实践:使用php内置错误处理程序,设置错误报告级别并指定自定义处理程序。使用自定义异常类创建特定应用程序的异常,携带相关信息。通过throw关键字抛出异常,指示意外事件。使用try-catch语句捕获和处理异常,包括
PHP 错误和异常的最佳实践是什么?
2024-05-09

php的错误和异常处理机制是什么

本篇内容主要讲解“php的错误和异常处理机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php的错误和异常处理机制是什么”吧!一、PHP的错误处理错误类型在PHP开发中,错误通常分为三种
2023-07-05

thinkphp3.2中的常见错误和解决方法是什么

本篇内容主要讲解“thinkphp3.2中的常见错误和解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp3.2中的常见错误和解决方法是什么”吧!1.404错误返回当我们
2023-07-05

PHP 函数命名错误的常见类型是什么?

常见的 php 函数命名错误类型有:使用不描述性的名称使用模糊不清的名称使用缩写或俚语使用下划线或连字符使用不一致的大小写PHP 函数命名中的常见错误类型命名规范是构建健壮和易于维护的 PHP 代码的关键。函数命名错误会使代码难以理解和维
PHP 函数命名错误的常见类型是什么?
2024-04-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录