JAVA-8-[SpringBoot]入门程序案例和原理分析

news/2024/11/15 8:33:05/

Spring Boot框架入门教程(快速学习版)
Spring Boot教程BooTWiki.COM

1 Spring Boot

Spring Boot是Pivotal(关键性的)团队在Spring的基础上提供的一套全新的开源框架,其目的是为了简化Spring应用的搭建和开发过程。Spring Boot去除了大量的XML配置文件,简化了复杂的依赖管理。

Spring Boot具有Spring一切优秀特性,Spring能做的事,Spring Boot都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot也成了时下炙手可热的技术。

Spring Boot集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的 Spring Boot应用都只需要非常少量的配置代码(基于Java的配置),开发者能够更加专注于业务逻辑。

1.1 Spring Boot是什么

简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;

众所周知Spring应用需要进行大量的配置,各种XML配置和注解配置让人眼花缭乱,且极容易出错,因此Spring一度被称为“配置地狱”。

为了简化Spring应用的搭建和开发过程,Pivotal团队在Spring基础上提供了一套全新的开源的框架,它就是Spring Boot。

Spring Boot具有Spring一切优秀特性,Spring能做的事,Spring Boot都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot也成为了时下炙手可热的技术。

Spring Boot提供了大量开箱即用(out-of-the-box)的依赖模块,例如 spring-boot-starter-redis、spring-boot-starter-data-mongodb和spring-boot-starter-data-elasticsearch等。这些依赖模块为Spring Boot应用提供了大量的自动配置,使得Spring Boot应用只需要非常少量的配置甚至零配置,便可以运行起来,让开发人员从Spring的“配置地狱”中解放出来,有更多的精力专注于业务逻辑的开发。
Spring Boot具有以下特点:
(1)独立运行的Spring项目
Spring Boot可以以jar包的形式独立运行,Spring Boot项目只需通过命令“ java–jar xx.jar” 即可运行。
(2)内嵌Servlet容器
Spring Boot使用嵌入式的Servlet容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成WAR包 。
(3)提供starter简化Maven配置
Spring Boot提供了一系列的“starter”项目对象模型(POMS)来简化Maven配置。
(4)提供了大量的自动配置
Spring Boot提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
(5)自带应用监控
Spring Boot可以对正在运行的项目提供监控。
(6)无代码生成和xml配置
Spring Boot不需要任何xml配置即可实现Spring的所有配置。

1.2 微服务简介

一、单体应用

一个单体应用程序把它所有的功能放在一个单一进程中。

二、微服务

2014年,Martin Fowler
微服务:架构风格
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。

1.3 配置开发环境

使用IDEA创建一个Spring Boot项目。

Spring Boot	2.x
JDK	8.0 及以上版本
Maven 	3.x
IntelliJ IDEA	14.0 以上

1.4 创建Spring Boot项目

Intellij IDEA 一般可以通过两种方式创建 Spring Boot 项目:
方式一:使用Maven创建。
方式二:使用Spring Initializr创建。

本处使用Maven方式创建。
一、使用IntelliJ IDEA创建一个名称为helloworld的Maven项目。
D:\CODEjava\helloworld
二、在该Maven项目的pom.xml中添加以下配置,导入Spring Boot相关的依赖。
三、在net.biancheng.www包下,创建一个名为helloWorldApplication主程序,用来启动Spring Boot应用,代码如下。
四、为了能比较的清楚的看到效果,我们在net.biancheng.www包下又创建一个controller包,并在该包内创建一个名为HelloController的 Controller,代码如下。

1.4.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>helloworld</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

1.4.2 helloWorldApplication.java

package net.biancheng.www;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class helloWorldApplication {public static void main(String[] args) {SpringApplication.run(helloWorldApplication.class, args);}
}

Spring Boot Application的入口点是包含@SpringBootApplication注释的类。该类应具有运行Spring Boot应用程序的主要方法。 @SpringBootApplication注释包括自动配置,组件扫描和Spring Boot配置。
如果将@SpringBootApplication批注添加到类中,则无需添加@EnableAutoConfiguration,@ComponentScan和@SpringBootConfiguration批注。@SpringBootApplication注释包括所有其他注释。

1.4.3 HelloController.java

package net.biancheng.www.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {@ResponseBody@RequestMapping("/hello")public String hello() {return "Hello World!";}
}

1.4.4 启动项目

默认情况下,Spring Boot项目会创建一个名为***Application的主程序启动类 ,该类中使用了一个组合注解@SpringBootApplication,用来开启Spring Boot的自动配置,另外该启动类中包含一个main()方法,用来启动该项目。

直接运行启动类HelloworldApplication中的main()方法,便可以启动该项目,结果如下图。
在这里插入图片描述
注意:Spring Boot内部集成了Tomcat,不需要人为手动配置Tomcat,开发者只需要关注具体的业务逻辑即可。
重启Spring Boot项目,然后在地址栏访问"http://localhost:8080/hello"。
在这里插入图片描述

2 Spring Boot starter

传统的Spring项目想要运行,不仅需要导入各种依赖,还要对各种XML配置文件进行配置,十分繁琐,但Spring Boot项目在创建完成后,即使不编写任何代码,不进行任何配置也能够直接运行,这都要归功于Spring Boot的starter机制。

所有Spring Boot启动程序都遵循相同的命名模式
spring-boot-starter-*,其中*表示它是应用程序的一种类型。

(1)spring-boot-starter-actuator依赖关系用于监视和管理应用程序。
(2)spring-boot-starter-security依赖项用于Spring Security。
(3)spring-boot-starter-web依赖项用于编写Rest端点。
(4)spring-boot-starter-thymeleaf依赖项用于创建Web应用程序。
(5)spring-boot-starter-test依赖项用于编写测试用例。

2.1 starter

Spring Boot将日常企业应用研发中的各种场景都抽取出来,做成一个个的starter(启动器),starter中整合了该场景下各种可能用到的依赖,用户只需要在Maven中引入starter依赖,Spring Boot就能自动扫描到要加载的信息并启动相应的默认配置。starter提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些starter都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。

并不是所有的starter都是由Spring Boot官方提供的,也有部分starter是第三方技术厂商提供的,例如druid-spring-boot-starter和mybatis-spring-boot-starter等等。当然也存在个别第三方技术,Spring Boot官方没提供starter,第三方技术厂商也没有提供starter。

以spring-boot-starter-web为例,它能够为提供Web开发场景所需要的几乎所有依赖,因此在使用Spring Boot开发Web项目时,只需要引入该Starter即可,而不需要额外导入Web服务器和其他的Web依赖。

在pom.xml中引入spring-boot-starter-web,示例代码如下。

<!--SpringBoot父项目依赖管理-->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/>
</parent>
....
<dependencies><!--导入 spring-boot-starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>...
</dependencies>

在该项目中执行以下mvn命令查看器依赖树。
mvn dependency:tree
在这里插入图片描述
从以上结果中,我们可以看到Spring Boot导入了springframework、logging、jackson以及Tomcat等依赖,而这些正是我们在开发Web项目时所需要的。

您可能会发现一个问题,即在以上pom.xml的配置中,引入依赖spring-boot-starter-web时,并没有指明其版本(version),但在依赖树中,我们却看到所有的依赖都具有版本信息,那么这些版本信息是在哪里控制的呢?其实,这些版本信息是由spring-boot-starter-parent(版本仲裁中心)统一控制的。

2.2 spring-boot-starter-parent

spring-boot-starter-parent是所有Spring Boot项目的父级依赖,它被称为Spring Boot的版本仲裁中心,可以对项目内的部分常用依赖进行统一管理。

<!--SpringBoot父项目依赖管理-->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/>
</parent>

Spring Boot项目可以通过继承spring-boot-starter-parent来获得一些合理的默认配置,它主要提供了以下特性:
(1)默认JDK版本(Java 8)。
(2)默认字符集(UTF-8)。
(3)依赖管理功能。
(4)资源过滤。
(5)默认插件配置。
(6)识别application.properties和application.yml类型的配置文件。

一、查看spring-boot-starter- parent的底层代码,可以发现其有一个父级依赖spring-boot-dependencies

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.4.5</version>
</parent>

二、spring-boot-dependencies的底层代码如下

<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.5</version>
<packaging>pom</packaging>
....
<properties><activemq.version>5.16.1</activemq.version><antlr2.version>2.7.7</antlr2.version><appengine-sdk.version>1.9.88</appengine-sdk.version><artemis.version>2.15.0</artemis.version><aspectj.version>1.9.6</aspectj.version><assertj.version>3.18.1</assertj.version><atomikos.version>4.0.6</atomikos.version>....
</properties><dependencyManagement><dependencies><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>${activemq.version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-blueprint</artifactId><version>${activemq.version}</version></dependency>...</dependencies>
</dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><version>${build-helper-maven-plugin.version}</version></plugin><plugin><groupId>org.flywaydb</groupId><artifactId>flyway-maven-plugin</artifactId><version>${flyway.version}</version></plugin>...</plugins></pluginManagement>
</build>

以上配置中,部分元素说明如下:
(1)dependencyManagement :负责管理依赖;
(2)pluginManagement:负责管理插件;
(3)properties:负责定义依赖或插件的版本号。
spring-boot-dependencies通过dependencyManagement 、pluginManagement和properties等元素对一些常用技术框架的依赖或插件进行了统一版本管理,例如Activemq、Spring、Tomcat等。

2.3 Spring Boot应用程序

Spring Boot Application的入口点是包含@SpringBootApplication注释的类。该类应具有运行Spring Boot应用程序的主要方法。 @SpringBootApplication注释包括自动配置,组件扫描和Spring Boot配置。
如果将@SpringBootApplication批注添加到类中,则无需添加@EnableAutoConfiguration,@ComponentScan和@SpringBootConfiguration批注。@SpringBootApplication注释包括所有其他注释。
请注意以下代码以便更好地理解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

3 编写一个Rest端点

要在Spring Boot Application主类文件本身中编写一个简单的Hello World Rest端点,请按照以下步骤操作:
(1)首先,在类的顶部添加@SpringBootApplication和@Controller注释。
(2)使用@ResponseBody和@RequestMapping注释编写Request URI方法。
(3)Request URI方法应该返回Hello World!123字符串。

package net.biancheng.www;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@SpringBootApplication
@Controller
public class helloWorldApplication {public static void main(String[] args) {SpringApplication.run(helloWorldApplication.class, args);}@ResponseBody@RequestMapping("/hello")public String hello() {return "Hello World!123";}
}

4 配置文件

在IDEA中写application.properties没有自动提示原因之一。
编辑application.properties文件时需要添加Spring Boot插件并且打开。
解决办法如下:
1.点击file选择Settings
2.点击Plugins
3.选择Marketplace并搜索:“Spring Boot”并点击Install安装
在这里插入图片描述
记得一定要把Spring Boot后面的方框打上勾,然后提示重启IDEA。
最后:查看application.properties文件已经变成一片绿叶子了。
注意:社区版本的IDEA无法安装Spring Boot插件。

4.1 基础配置

因为IDEA是社区版,所以不能安装Spring Boot插件,选择安装Spring Boot Assistant,然后就可以用application.yml识别配置内容,最后设置到application.properties。

1、SpringBoot默认配置文件application.properties,通过键值对配置对应属性。
# 服务器端口配置
server.port=80
# 修改banner,logo
spring.main.banner-mode=off
# 修改日志级别
logging.level.root=INFO
2、Spring Boot中导入对应starter后,提供对应配置属性。
3、书写Spring Boot配置采用关键字+提示形式书写。

4.2 三种配置文件类型

1、application.properties(传统格式/默认格式,优先级最高)
server.port=802、application.yml(主流格式)
server:port: 813、application.yaml(优先级最低)
server:port: 82

http://www.ppmy.cn/news/39788.html

相关文章

List中常见的方法和五种遍历方式

目录 List集合的特点 List集合的遍历方式 五种遍历方式对比 List集合的特点 有序&#xff1a;存和取的元素顺序一致有索引&#xff1a;可以通过索引操作元素可重复&#xff1a;存储的元素可以重复Collection的方法List都继承了&#xff1b;List集合因为有索引&#xff0c;所…

高效拓客必备工具:采集工具助力,让你事半功倍

在当今竞争激烈的市场环境下&#xff0c;企业想要获得更多的市场份额&#xff0c;拓展更多的客户&#xff0c;必须要进行拓客工作。而在拓客过程中&#xff0c;采集工具是必不可少的工具之一。采集工具可以帮助企业快速获取目标客户的信息&#xff0c;并进行有效的沟通和跟进&a…

第6章 封装组件高级篇(下) - table

--components/table--src--index.vue--index.ts--index.tssrc/index.ts export interface TableOptions {// 字段名称prop?: string,// 表头label: string,// 对应列的宽度width?: string | number,// 对齐方式align?: left | center | right,// 自定义列模板的插槽名slot?…

web + servlet + jdbc mysql 实现简单的表单管理界面

目录数据库创建数据库连接servlet创建,这里注意一下我的数据库我自己改了一下名字lhx网页html运行文件目录展示首先我们准备好开发使用的工具以及配置 idea2020 tomcat8.5 创建javaweb参考idea编译Tomcat详细步骤 IDEA通过JDBC连接数据库请参考jdbc连接数据库 需要登陆注册界面…

2023-04-11 monetdb-BAT及投影限制处理-分析

摘要: monetdb-BAT及投影限制处理-分析 BAT说明 官方说明: Design Overview | MonetDB Docs item strong{BAT Alignment:} Due to the mapping of multi-ary datamodels onto the BAT model, we expect many correspondences among BATs, e.g. emph{bat(oid,attr1),.. bat(oi…

synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)

文章目录1. synchronized 的作用1&#xff09;保证原子性2&#xff09;保证内存可见性3&#xff09;保证有序性2. synchronized 特点3. 锁升级的过程1&#xff09;偏向锁2&#xff09;轻量级锁3&#xff09;重量级锁4. 锁的优化操作1&#xff09;锁消除2&#xff09;锁粗化5. s…

ElasticSearch系列 - SpringBoot整合ES:多字段查询 multi_match

文章目录1. 什么是 ElasticSearch 的 multi_match 查询&#xff1f;2. 如何在 multi_match 查询中指定查询字段&#xff1f;3. 如何在 multi_match 查询中指定查询权重&#xff1f;4. SpringBoot整合ES实现 multi_match 查询1. 什么是 ElasticSearch 的 multi_match 查询&#…

[测试新人必看] 测试报告如何编写? 掌握这五十个测试报告模板

作为一个曾经是测试萌新的我&#xff0c;在首次接收到一个任务时总有一种忐忑慌张激动紧张期望的复杂情绪~~ 忐忑慌张紧张是怕自己做不好&#xff0c;得不到领导的赏识&#xff1b;激动期望是哇塞&#xff0c;我有任务了耶&#xff0c;终于有我的用武之地了~~~ 就好比今天的主题…