Java 开发人员不得不知道的五大 Spring Boot 特性

Java 开发人员不得不知道的五大 Spring Boot 特性_第1张图片

您可能听说过 Spring Boot,它的神奇力量是创建一个不到 140 个字符的 Spring Web 应用程序,可以写在一条推文中,但这究竟意味着什么?是什么特性为 Spring Boot 提供了如此强大的功能并使 Spring 应用程序开发如此简单?好吧,这就是您将在本文中学习的内容,但是如果您赶时间,让我告诉您,您将详细了解 Spring Boot 的自动配置、Starter 依赖项、Spring Boot CLI、Actuator 和 Spring Initializer 功能。这些特性消除了与编写基于 Spring 的 Java Web 应用程序相关的大部分痛苦和摩擦。

但是,在进入这个细节之前,让我们重新审视一下与基于 Spring 的 Java 开发相关的问题。我个人喜欢在享受解决方案之前先看到问题并感受它。请记住,只有在努力工作后才会感到舒适,用餐也是如此,当您饿了时,您会更享受。

Spring 无疑是一个很棒的框架,它为你做了很多事情,例如它为你创建了一个对象,它为它们提供了它们的依赖关系,如果 Spring 不存在,它会带走你编写的大量代码,但作为回报它在配置和学习方面也对你提出了很多要求。

如果您曾经在一个新建项目中工作过,并且您从头开始创建一个全新的基于 Spring 的 Java 应用程序,那么您就会知道这不是小菜一碟。您首先需要找到所需的所有依赖项,然后找到它们的兼容版本。您还需要配置很多 bean 来启用一些 Spring 魔法。

例如,如果你想创建一个 基于 Spring MVC 的 REST 应用程序,它支持嵌入式 tomcat 中的 JSON 格式,那么你的 Maven pom.xml 文件中至少有 8 到 10 个依赖项,例如 spring-core.jar、spring-mvc.jar、 jackson.jar、embedded-tomcat.jar 等,请注意这是一个非常简单的设置。

Spring Boot 只是消除了所有这些痛苦,让您编写重要的代码,即应用程序代码。我提到的所有 Spring Boot 特性,例如自动配置、Starter POM 或 Starter 依赖项以及 Spring Boot CLI 旨在简化使用 Spring 的 Java 开发。

现在,让我们更详细地了解这些功能中的每一个

1、 自动配置

您可能使用过基于 Spring 的 Java Web 应用程序,该应用程序连接到关系数据库,例如像 H2 这样的内存数据库,如果是,那么您可能知道您需要声明JdbcTemplate为 bean,并且还需要配置一个 DataSource,它是JdbcTempalte 的依赖项。

在使用基于 Java 的现代 Spring 应用程序中configuration,您需要将以下两个方法添加到您的

Configuration 类中:

@豆
公共 JdbcTemplate jdbcTempalte(DateSource ds){
   返回新的 JdbcTempalte(ds);
}

@豆
公共数据源数据源(){
  返回新的 EmbeddedDatabaseBuilder()
     .setType(EmbeddedDatabaseType.H2)
     .addScripts('ddl.sql', 'data.sql')
     。建造();
}

对于做过 Spring 开发的人来说,这并不是一个复杂的问题,但是如果您重新开始,那么可能需要数小时和数天才能弄清楚这一点。

但是,更重要的是,这是我们许多人编写的一段代码,与我们的应用程序无关。我的意思是,这段代码不是唯一的,每个使用 JDBC 的 Spring 应用程序都需要它。

这就是 Spring Boot AutoConfiguration 发挥作用的地方。它会检测类路径中是否存在某个类,然后自动为您配置它。

例如,如果您已经添加JdbcTempalte到类路径和 H2.jar 中,那么 Spring Boot 可以自动为您配置一个内存数据库和一个可以使用的 JdbcTempatle。您无需编写上述代码即可JdbcTemplate在 DAO 层中使用。

这只是一个例子。Spring Boot 自动配置做出了 200 多个这样的决定,并通过检查 JAR 依赖关系自动配置许多功能。例如,如果 spring-mvc.jar 存在,那么它可以自动配置 DispatcherServlet、 InternalViewResolver等。

如果存在 JPA 和 Hibernate,那么它也可以配置它,如果你有 spring-security.jar,那么它甚至可以配置一个基本的安全性来保护你的应用程序。

顺便说一句,在依赖自动配置时,需要深入了解才能正确保护您的应用程序。

默认情况下,自动配置功能处于禁用状态,您需要通过在配置类上使用@EnableAutoConfiguration或@SpringBootApplication注释来启用它。我通常注释 Main 类,我将使用嵌入式 Tomcat 服务器运行该类。

建议@SpringBootApplication从 Spring Boot 1.2 开始使用注解,因为它结合了其他几个注解以使您的代码更具可读性。

简而言之,Spring Boot 的自动配置功能节省了大量工作并减少了开发时间,我强烈建议您在使用 Spring Boot 时使用自动配置。

Java 开发人员不得不知道的五大 Spring Boot 特性_第2张图片

2、 入门 POM

虽然 AutoConfiguration 消除了配置通用功能的痛苦,但 Starter POM 通过在项目中查找和添加通用依赖项来消除痛苦。

为了构建一个简单的基于 Spring MVC 的支持 Jackson的 REST 应用程序并运行它一个嵌入式容器,您至少需要以下依赖项,例如

spring-core.jar
spring-web.jar
spring-webmvc.jar
杰克逊-databind.jar
tomcat-embed-core.jar
tomcat-embed-el.jar
tomcat-embed-logging-juil.jar

通过使用 Spring Boot Starter POM 或 starter 依赖功能,您只需在 pom.xml 中添加 spring-boot-starter-web 依赖即可获得所有这些

因此,无需添加所有这些依赖项并担心它们的兼容版本,您只需添加一个即可。您还将更有信心使用经过尝试和测试的库版本,并且将来不会出现任何不兼容问题。

启动 POM 功能的另一个微妙好处是您不需要记住或搜索依赖项。如果您正在构建 web 应用程序,您可以添加一个“web”启动器,如果您正在构建

JPA 应用程序,您可以添加“jpa”启动器,通过按功能聚合常见的依赖项 Spring Boot 使它们易于记忆和使用。

顺便说一句,如果您想知道 Starter POM 功能在内部是如何工作的,那么让我告诉您所有的魔法都来自 Maven 或 Gradle 的传递依赖功能。提取正确版本的库的是 Maven 或 Gradle,Starter POM 只需声明它们。如果您想了解更多信息,我建议您查看 Dan Vega 的 Spring Boot 快速应用程序开发课程。

简而言之,Starter POM 或 starter 依赖是 Spring Boot 的另一个很棒的特性,它确实有助于简化 Spring 应用程序的开发。它就像自动配置的近亲,你会经常一起使用它们。

Java 开发人员不得不知道的五大 Spring Boot 特性_第3张图片

3、 Spring Boot CLI

在本文的第一段中,我说过现在可以创建一个适合推文的 Java Web 应用程序,这得益于 Groovy 和 Spring Boot CLI。

Spring Boot CLI 是 Spring Boot 框架提供的命令行界面,它允许您使用 Groovy 编程语言创建基于 Spring 的 Web 应用程序。实际上,Groovy 和 Spring Boot 很好地互补,Groovy 旨在使 Java 开发更简单,而 Spring Boot 旨在使 Spring 应用程序开发更简单,并且都从彼此的简单性中受益。

虽然自动配置和启动器依赖项是 Spring Boot 的一个组成部分,但 Spring CLI 是一个可选功能,您还需要安装 Spring CLI 才能使用它。

这是 Groovy 和 Spring Boot CLI 中的一个简单的 HelloWorld RESTful Web 服务,即使不编译也可以运行,如下所示:

@RestController
类 HelloSpringBootController{

  @RequestMapping("/")
  定义你好(){
    返回“你好 Spring Boot CLI”
   }
}

就是这样,您可以在 Spring Boot CLI 附带的嵌入式容器上运行它,无需 web.xml,无需配置,也无需服务器设置。

如果您想知道这些整体是如何工作的,即 Groovy 是如何知道 @RestController和@RequestMapping注释的,那么让我告诉您 Spring Boot CLI 利用自动配置和启动 POM 功能让您只专注于编写应用程序代码?

Spring Boot CLI 检测到@RestController并@RequestMapping正在使用它,它知道需要将哪些启动器依赖项添加到类路径中才能使其工作。

一旦下载了这一系列依赖项,自动配置就会自动启动并配置它以供使用,例如,一旦 spring-boot-web-starter 进入图片,它就会下载 spring-mvc.jar,然后自动配置会自动配置 DispatcherServlet并启用春天MVC。

这整个事情看起来像魔术,但它是一个现实。

Java 开发人员不得不知道的五大 Spring Boot 特性_第4张图片

4、执行器

执行器是 Spring Boot 的另一个很棒的功能,它允许查看正在运行的 Spring Boot 应用程序中发生的事情。凭借其自动配置的所有优点,存在不知道应用程序内部内容的风险,而 Spring Actuator 解决了该风险。

它提供了很多关于生产中正在运行的应用程序的见解和指标。例如,通过使用 Actuator,您可以准确了解在应用程序上下文中配置了哪些 bean,做出了哪些自动配置决策,应用程序可以使用哪些环境变量、系统属性、命令行参数等等。

您甚至可以跟踪应用程序处理的 HTTP 请求,以及各种有用的应用程序指标,例如 CPU 和内存使用情况、垃圾收集详细信息、Web 请求和数据源使用情况。

Spring Boot Actuator 还提供了几个端点来检索这些数据,例如,您可以使用 RESTful API 获取所有这些信息,或者您可以使用其远程 shell 功能安全地进入应用程序并通过发出命令获取所有这些信息。

它还使用 JMX MBean 公开了所有这些功能,这意味着您可以在运行时使用 JConsole 之类的 JMX 客户端来控制它们。

同时,您还需要保护对 Actuator 端点的访问,因为它不仅会暴露机密信息,而且很危险。例如,任何人都可以使用 /shutdown 端点来停止您的应用程序。

不过,您不必担心。与任何其他 Spring 应用程序一样,您可以使用 Spring Security 来保护 Actuator 端点。

5、 Spring Boot 初始化器

Spring Initializer 是 Spring Boot 的另一个特性,它解决了项目结构方面的问题。它是一个 Web 应用程序,允许您使用 Java、Kotline 或 Groovy 和 Spring Boot 生成 Maven 或 Gradle 项目。

您需要指定的只是在 GUI 中提供项目元数据,例如项目名称、组、工件等。它还允许您从大列表中选择启动器依赖项,例如 web、JPA 或安全启动器。

Spring Initializer 项目可以在 https://start.spring.io/ 访问。创建项目后,您可以下载 Zip 文件,然后打开 IDE,如 Eclipse 或 IntelliJ IDEA,如 Nelson Djalo 的 Spring Boot Essential 课程中所述。然后,您可以编辑此示例项目以放置您的代码。

根据我的经验,许多 Java 和 Spring 开发人员面临的常见问题之一是启动项目。他们中的许多人对是否放置您的 Java 文件、资源文件等一无所知。

虽然 Maven、Gradle、 IntelliJ IDEA和 Eclipse可以帮助您提供基本结构,但您仍然需要精通这两项技能才能抢占先机,如果您不熟悉 Maven 或您的 IDE,那可能是一场噩梦。

Spring Boot Initaizer 解决了这个问题,让创建基于 Spring 的 Java 应用程序变得容易,而无需真正了解 Spring 框架的大量内部细节。

这就是 Java 开发人员应该知道的 Spring Boot 的一些基本特性。这些特性确实使使用 Java 和 Spring 变得有趣和高效,这就是为什么越来越多的公司采用 Spring Boot 进行 Java 开发。具有 Spring Boot 经验的 Java 开发人员也很受欢迎,如果您正在寻找作为 Java Web 开发人员的下一份工作,那么 Spring Boot 技能真的可以发挥作用。

你可能感兴趣的:(java,面试,spring)