Java开发人员应该知道的5大Spring Boot功能

您可能已经听说过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 Magic。

例如,如果您要创建一个基于Spring MVC的REST应用程序 ,该应用程序在嵌入式tomcat中支持JSON格式,则您的Maven pom.xml文件(例如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的configuration的现代Spring应用程序中,您需要将以下两种方法添加到您的
配置类:

@Bean
public JdbcTemplate jdbcTempalte(DateSource ds){return new JdbcTempalte(ds);
}@Bean
public DataSource dataSource(){return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScripts('ddl.sql', 'data.sql').build();
}

对于已经完成Spring开发的人来说,这并不是什么复杂的事情,但是如果您是从头开始的话,可能要花几个小时甚至几天才能弄清楚。

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

这就是Spring Boot AutoConfiguration出现的地方。 它检测到Classpath中存在某些Class,然后自动为您配置它。

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

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

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

顺便说一句,当涉及到自动配置时,需要深入的知识来适当地保护您的应用程序。

默认情况下,自动配置功能是禁用的,您需要通过在Configuration类上使用@EnableAutoConfiguration@SpringBootApplication批注来启用它。 我通常会注释Main类,它将与嵌入式Tomcat服务器一起运行。

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

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

Spring Boot功能

2.入门级POM

尽管自动配置消除了配置通用功能的麻烦,但Starter POM通过在项目中查找和添加通用依赖关系而减轻了痛苦。

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

spring-core.jar
spring-web.jar
spring-webmvc.jar
jackson-databind.jar
tomcat-embed-core.jar
tomcat-embed-el.jar
tomcat-embed-logging-juil.jar

通过使用Spring Boot Starter POM或启动程序依赖项功能,只需在pom.xml中添加spring-boot-starter-web依赖项就可以获取所有这些信息

因此,您无需添加所有这些依赖项并担心它们的兼容版本,只需添加一个即可。 您还将更加自信地使用了久经考验的库版本,将来不会出现任何不兼容性问题。

入门POM功能的另一个细微优点是您无需记住或搜索依赖项。 如果要构建Web应用程序,则可以添加“ Web”启动器(如果要构建)
JPA应用程序可以通过按功能聚合常见的依赖项来添加“ jpa”启动程序,Spring Boot使它们易于记忆和使用。

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

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

Spring Boot功能

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
class HelloSpringBootController{@RequestMapping("/")def hello() {return "Hello Spring Boot CLI"}
}

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

如果您想知道这一切的工作原理,例如Groovy如何了解@RestController和@RequestMapping注释,那么让我告诉您Spring Boot CLI利用自动配置和启动程序POMs功能让您专注于仅编写应用程序代码?

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

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

整件事看起来像是魔术,但这是现实。

Spring Boot功能

4.执行器

该执行器是Spring Boot的另一个很棒的功能,它可以查看正在运行的Spring Boot应用程序中发生的情况。 由于具有自动配置的所有优点,因此存在不知道应用程序内部内容是什么的风险,并且该风险由Spring Actuator解决。

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

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

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

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

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

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

Spring Boot功能

5. Spring Boot初始化器

Spring Initializer是Spring Boot的另一个功能,可以解决项目结构方面的问题。 这是一个Web应用程序,允许您使用Java,Kotline或Groovy和Spring Boot生成Maven或Gradle项目。

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

可以从https://start.spring.io/访问Spring Initializer项目。 创建项目后,您可以下载Zip文件,然后按Nelson Djalo的Spring Boot Essential课程中的说明打开到Eclipse或IntelliJ IDEA之类的IDE中。 然后,您可以编辑此示例项目以放入您的代码。

根据我的经验,许多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的技能确实会有所作为。

到目前为止,非常感谢您阅读本文。 如果您喜欢这些Spring Boot功能,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请留言

翻译自: https://www.javacodegeeks.com/2018/11/spring-features-java-developers-know.html

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

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

相关文章

java 使用本机代理_Java与本机代理–他们所做的强大功能

java 使用本机代理在安装代理之前应了解的内容及其对代码的影响 在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码。 已经开发出一种新的工具来帮助Java和Scala开发人员做到这一点。 它们中的许多都是建立在最强大…

在任何无法理解的情况下,请编写脚本

脚本编写是使您的应用程序在运行时就可以根据客户需求进行调整的最流行的方法之一。 与往常一样,此方法不仅带来好处,例如,在灵活性和可管理性之间存在众所周知的折衷方案。 本文不是从理论上讨论优缺点的文章之一,而是从实践上展…

下载anaconda时出现“Please make sure you are connected to the internet”警告

如题,在anaconda下载过程中下载VScode时出现下图的警告。 百度翻译: 顺着图中指定文件路径,找到vscode_inst.py.log文件(注:有些人ProgramData文件夹可能找不到,打开任意文件夹,点击查看&…

多个公证员提高网络吞吐量

您是否需要非常高吞吐量的Corda网络? 网络的吞吐量是否稳定? 您是否已经从其他领域挤出了所有可能的表现? 如果您对这些问题的回答是“是”,那么我可能会为您提供一些有用的信息。 我列出了这些问题,以减少您过早优化C…

初识FPGA(搬运)

原文链接1原文链接2 fpga简介 FPGA(Field-Programmable Gate Array), 即现场可编程门阵列,它是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑器件)、CPL(复杂可…

蓝桥杯小白系列之汇编点亮led灯

蓝桥杯小白系列之汇编点亮led灯 1、源代码 2、逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起。 (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会自动响起,故在程序前提前加上如下代码,让蜂鸣器不响: mov P2,#0A0H mov P0,#000H 参照…

带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分

在上一篇文章中,我使用Oracle Digital Assistant为FlexDeploy实现了一个对话式UI。 今天,我将用Fn Flow丰富它,以便聊天机器人接受发行名称而不是ID来创建快照。 完成后,对话听起来会更加自然: … “您可以建立快照吗…

小白系列之51单片机的入门速成法

51单片机的入门速成法 01-经典51内核资源全览浓缩图 02-重要外设特殊功能寄存器概览 03-程序开发流程与设计要点 04-三大外设的开发与可重用代码 05-应用程序设计入门一例通 01-经典51内核资源全览浓缩图 <1> 四组8位并行I/O端口&#xff1a; P0端口&#xff1a;PC门&a…

蓝桥杯基础模块1:LED跑马灯

一、模块题目 二、原理简述 1、74HC138:三八译码器(3个输入,8个输出) 2、74HC573:锁存器(20个引脚,D1D8是数据输入端,Q1Q8是数据输出端&#

如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性

介绍 开源的hibernate-types项目允许您映射JSON&#xff0c;ARRAY&#xff0c; YearMonth &#xff0c; Month或数据库特定的列&#xff08;例如INET地址&#xff09;。 在本文中&#xff0c;我们将看到使用JPA和Hibernate时如何将PostgreSQL Enum类型映射到Java数组。 Maven…

蓝桥杯基础模块2:蜂鸣器继电器

一、模块题目 二、原理简述 1、74HC138(参见模块1) 2、74HC02(参见模块1) 3、74HC573(参见模块1)

蓝桥杯基础模块3_1:数码管静态显示

一、模块题目 二、原理简述 1、数码管 CT107D单片机综合实训平台上使用的数码管是F3461BH(倒数第二个字母是A则共阴,是B则共阳)。 F3461BH是一个4位8段的数码管,其中a、b、c、d、e、f、g、dp引脚分别对应8个段码,该8个引脚通过74HC573锁存器与单片机的P0端口相连。另外有…

蓝桥杯基础模块3_2:数码管动态显示

一、模块题目 二、原理简述 动态显示的基本原理与实现思路(转载) 动态显示实质上就是轮流点亮单个数码管实现多位数码管整体显示的效果。在轮流显示过程中,每位数码管点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但…

蓝桥杯基础模块4_1:独立按键

一、模块题目 二、原理简述 1、独立按键的处理思路(转载) 一般情况下,独立按键有两个引脚,其中一个通过上拉电阻接到单片机的I/O端口,另外一端接地。也就是说,平时按键没有动作的时候,输出的是高电平,如果有按下动作发生,则输出的是低电平。那么,我们在程序设计的时…

蓝桥杯基础模块4_3:矩阵按键

一、模块题目 二、原理简述 1、矩阵键盘的扫描思想(转载+删减) 与独立按键不同的是,按键的两个引脚都分别连接的单片机的I/O端口,一个作为行信号,另外一个作为列信号。下以4X4的矩阵键盘为例,探讨其工作方式和扫描思路。 要识别出黄色按键的按下状态,逐行扫描,然后读…

蓝桥杯基础模块5:外部中断

一、模块题目 二、原理简述 (转载,删改) 1、什么是中断 你正在追电视剧《神雕侠侣》,正看得入迷的时候,电话响了,你暂停电视剧,去接电话,在接电话的过程中,门铃又响了,你暂时放下电话,去把门打开。如果追电视剧是在执行主程序,那么电话就是中断源,电话铃响了就是中…

蓝桥杯基础模块06_1:定时器计数器

一、模块题目 二、原理简述 &#xff08;转载&#xff0c;删改&#xff09; 1、定时器、计数器定义 在没有钟表的时候&#xff0c;定时的方式通过有一注香的时间&#xff0c;或者一桶水的时间。前者烧香不断减少是减法&#xff0c;后者滴水不断增加是加法。 定时/计数器&#…

structure101_使用structure101分析软件包的依赖关系

structure101稳定应用程序的一个关键是结构良好的代码库。 我们知道我们应该建立尽可能多的黑匣子&#xff0c;因为一旦完成一个黑匣子&#xff0c;我们就不必再考虑其内部了。 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可。 这使您可以专注于要添加的下一个…

蓝桥杯基础模块6_2:定时器进阶

一、模块题目 二、原理图 1、数码管