Java框架(九)--Spring Boot入门(1)

SpringBoot 2.x入门简介

学前基础

Maven
Spring
MVC理念

开发环境

Spring Boot官网版本介绍
https://spring.io/projects/spring-boot#learn
在这里插入图片描述
我们点击 Reference Doc. ,再点击Getting Started,就可以看到官网系统环境说明了
在这里插入图片描述
官网系统环境说明
在这里插入图片描述

Spring与SpringBoot

Spring官网
https://spring.io/
在这里插入图片描述
所有的Spring的生态体系所有的框架的底子都依赖于Spring的。
SpringBoot其实是一套简化的Spring技术栈的开发的脚手架。通过SpringBoot的使用,可以把相应组件都可以引入到项目里面来,使得我们更多的精力关注到业务。

Spring Boot核心特点

开箱即用:之前开发SSM系统的时候,想启动系统就配置Tomcat、项目打包到对应的目录等,这些在Spring Boot里都不需要再做了,它是可以非常轻松的被独立创建起来的,直接启动main函数就可以启动起来,因为Tomcat也被内嵌在其中。
约定优于配置:很多项目都有默认配置,Web端口号默认就是8080,像这些配置大家都是约定俗成的,在开发环境直接遵守这个配置就可以了,还方便团队协作。像这样的配置,对于Spring Boot来说就非常良好的约定,只需要遵守,不再需要重复的配置,或者只需少量的配置即可。Spring Boot把这条核心特点运用的淋漓尽致,告别了各种各样的配置,使得Spring Boot非常简单易用和快速上手。

MVC模式

Model 模型层:存取数据的对象,一般来说统称为JavaBean、Entity、POJO类等。它也可以有相应的逻辑的,在数据变化的时候,在控制器Controller 里面的数据变更。本质上可以理解为是一个数据对象,这个数据对象可以是从数据库里面读取出来进行封装,也可以是从前端(H5、安卓、小程序等)传过来的一个对象。
View 视图层:模型要展示的内容,其实也就是可数据化、要可视、要可以被展示的渲染内容。比如早期的jsp , Freemarker ,又或者后面要接触的 Thymeleaf 等等。
Controller 控制层:也可以叫做控制器。控制器是作用于模型和视图之上的,主要控制数据流向模型。并且,在数据变化的时候,也可以去控制里面的内容,控制对象中封装的数据去更新到视图里面。使得视图和模型可以两两分开进行解耦。简而言之,可以在控制器里面去实现业务逻辑,可以接受来自视图层的数据对象,并且加以处理,也可以对数据库读取后的数据处理后,再反馈给视图层。
在这里插入图片描述
MVC模式是一种通用的web开发模式,不管是在以前还是在现在,它一直都是存在的,只不过技术框架在变更,但是它的本质还是不变的。

Struts1/2 + Spring + Hibernate 早期的框架组合SSH
SpringMVC + Spring + MyBatis 后面非常主流的框架SSM
SpringBoot + Spring + MyBatis(JPA/Hibernate) 现在的主流框架

SpringBoot 版本标签

GA:General Availability发布版本,面向大众的,可用的稳定版本,特点为功能完整且非常的稳定,一旦发布后代码内容不会轻易更改。推荐选择这个版本的其中一个。
CURRENT:最新的GA版本。
SNAPSHOT:快照,还不稳定,可能随时会被修改。
PRE:尝鲜版本,或叫预发布版本,提供给开发人员使用,但是不推荐在生产环境中使用。
在这里插入图片描述

通过官网Initializr构建SpringBoot

浏览器访问start.spring.io并按图配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成完项目解压并用IDEA打开(依次点击File->open并选择解压好的项目文件即可)
在这里插入图片描述
其中SpringBootLearnApplication为启动类,也是应用程序的入口类,它的位置不可随意改动。
启动类需要放在根包路径下,因为他会默认扫描Contoller和Service以及Mapper等一些相关的组件,扫描完了之后,会放入到spring/springboot的容器中。

通过IDEA构建基于Maven的SpringBoot

打开IDEA依次点击File->new->Project然后按下图配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用IDEA生成比官网更简便。

在com.ql.springbootlearn.controller包下创建HelloController.java

package com.ql.springbootlearn.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;//@Controller
@RestController
public class HelloController {@RequestMapping("hello")//@ResponseBodypublic String hello(){return "Hello World~~";}
}

其中@RestController注解为在普通的Controller注解基础上有RESTful能力,相当于@Controller与@ResponseBody的结合。

运行启动类,在浏览器访问http://localhost:8080/hello
在这里插入图片描述

@RequestMapping与Postman的使用

除了@RequestMapping还有@GetMapping、@PostMapping、@PutMapping、@DeleteMapping四种遵循了REST规范的请求注解。
一般来说查询使用@GetMapping,对于保存使用@PostMapping,对于修改使用@PutMapping,对于删除使用@DeleteMapping,这是一种强规范。如果使用弱规范,@GetMapping使用与查询,@PostMapping使用与增删改。

除了Get请求,其他请求的测试就无法使用浏览器地址栏测试了,所以推荐使用Postman工具。
我们可以把HelloController的方法请求注解改为PostMapping并重启项目

    @PostMapping("hello")public String hello(){return "Hello World~~";}

再浏览器访问就找不到路由
在这里插入图片描述
可以打开Postman访问请求
在这里插入图片描述

SpringBoot 启动器starter依赖管理

我们打开pom.xml可以看到有个parent的依赖,它是引入了父工程SpringBoot(启动器starter),它里面包含了很多SpringBoot的子工程。在这里插入图片描述
我们可以把鼠标放到spring-boot-starter-parent上,然后按住Ctrl点击打开。
在这里插入图片描述
再按住Ctrl点击spring-boot-dependencies打开。
在这里插入图片描述
所以说spring-boot-starter-parent帮我们定义了自带的一些jar包,在需要的时候直接引用就可以了,而且它们的版本也不需要再写一遍,都已经定义好了,而且都是现阶段最佳最稳定的匹配的版本。当然想要使用其他的版本的话,在pom.xml里重写并指定需要使用的版本即可。

我们以前在开发项目的时候,引入某个框架就会这个框架和他的相关依赖的坐标都引入的pom.xml文件里,并指定各个依赖的版本。当我们使用了SpringBoot的时候,他帮我们做了统一,我们只需要引入这个框架的starter,就会自动的把相关技术栈相关依赖都统一的引入到我们的项目里面来,我们不再需要写这些相关依赖的坐标和版本。这使得我们pom.xml文件看起来精简了很多,提高了我们的可读性,并且他们的冗余度也不会很多。这样实现了我们一站式的开发,我们对jar包的管理方式更加的方便。

SpringBoot官方的starter依赖
在这里插入图片描述

SpringBoot的yml配置文件

在项目src/main/resources目录下创建application.yml文件。

server:port: 8090

这个是由官方所提供的SpringBoot核心配置文件。并把HelloController的方法请求注解改为GetMapping。

    @GetMapping("hello")public String hello(){return "Hello World~~";}

我们启动项目,在浏览器访问http://localhost:8090/hello
在这里插入图片描述
配置文件生效。

SpringBoot项目配置文件格式有两种:
properties

environments.dev.url=http://ql.com
environments.dev.name=Developer

yml:分层级,冒号后需要空格

environments:dev:url: http://ql.comname: Developer

每一层有个Tab缩进,大小写敏感,相同的部分只会出现一次。

官方文档上还有很多配置的说明。
在这里插入图片描述

bootstrap.yml配置文件

SpringBoot里有两种配置文件,一个是application.yml,另一个是bootstrap.yml。bootstrap.yml是一种启动级别的,主要用于处理额外的资源配置加载配置信息。

上下文对象: application vs bootstrap
加载优先级: bootstrap > application
常用性: application.yml > bootstrap.yml

application.yml和bootstrap.yml都会用同一个SpringBoot容器环境。bootstrap.yml里面相关的属性是不会被覆盖的。

使用场景
application.yml主要用于springboot项目的配置。
bootstrap.yml 在SpringCloud里有个配置中心,需要加载外部的配置,就需要用到bootstrap.yml。还有加密解密、固定参数等场景也用到bootstrap.yml。

devtools 自动重启实现

打开pom.xml文件,引入devtools组件

		<!--springboot 提供的开发者工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

启动项目,在浏览器访问http://localhost:8090/hello
在这里插入图片描述
我们修改HelloController.java中方法为

@GetMapping("hello")public String hello(){return "Hello SpringBoot~~";}

然后依次点击IDEA菜单栏的Build=>Build Project
在这里插入图片描述
再次刷新浏览器就会自动加载更新的内容。
在这里插入图片描述
devtools 只会Java类代码的修改后能自动编译,如果涉及到资源配置的修改的话就无法自动重启了。
如果是项目已经做大了就不推荐这个组件了。

依赖注入与控制反转的实现

在com.ql.springbootlearn.pojo包下创建Stu.java实体类

package com.ql.springbootlearn.pojo;public class Stu {public String name;public Integer age;public Stu(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

然后在com.ql.springbootlearn.config包下创建SpringBookConfig.java配置类

package com.ql.springbootlearn.config;import com.ql.springbootlearn.pojo.Stu;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringBookConfig {@Beanpublic Stu stu(){return new Stu("Jack", 20);}
}

其中@Configuration注解为了说明当前类为配置类,加上这个注解后会被容器扫描到。该注解和@Controller、@Service、@Repository、@Component等注解同等作用,只是根据场景以及类的业务选择使用即可。

然后在HelloController.java里注入Stu类

    @Autowiredprivate Stu stu;@GetMapping("getStu")public Object getStu(){return stu;}

运行项目,浏览器访问http://localhost:8090/getStu
在这里插入图片描述

SpringBoot自定义属性资源配置

在src/main/resources目录下创建MyConfig.properties属性文件

user.username=Tom
user.age=21
user.sex=

然后在com.ql.springbootlearn.pojo包下创建MyConfig.java类

package com.ql.springbootlearn.pojo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "user")
@PropertySource(value = "classpath:MyConfig.properties", encoding = "utf-8")
public class MyConfig {public String username;public Integer age;public String sex;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

其中@ConfigurationProperties必须配置属性前缀prefix = “user”。另外引入这个注解后会在编辑器上方报一个Spring Boot Configuration Annotation Processor not found in classpath
我们只需要在pom.xml文件引入一个配置处理器依赖即可

		<!--SpringBoot配置处理器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency>

然后在HelloController.java注入该配置类

    @Autowiredprivate MyConfig myConfig;@GetMapping("getMyConfig")public Object getMyConfig(){return myConfig;}

运行项目,浏览器访问http://localhost:8090/getMyConfig
在这里插入图片描述
注意:出现中文乱码的,设置下IDEA编码
在这里插入图片描述

在yml中实现自定义配置与表达式

打开application.yml文件添加以下内容

server:port: 8090app:name:xxx:yyy:zzz: abcself:custom:sdkSecrect: abc123host: https://www.ql.comport: ${server.port}

然后在HelloController.java中引用

    @Value("${self.custom.sdkSecrect}")private String sdkSecrect;@Value("${self.custom.host}")private String host;@Value("${self.custom.port}")private String port;@Value("${app.name.xxx.yyy.zzz}")private String xyz;@GetMapping("getYmlConfig")public Object getYmlConfig(){return host+":"+port+"/"+xyz+"/"+sdkSecrect;}

运行项目,浏览器访问http://localhost:8090/getYmlConfig
在这里插入图片描述

实现自定义的启动logo

在src/main/resources/static目录引入图片
在这里插入图片描述
然后在application.yml中添加

spring:banner:image:location: classpath:static/banner.pngpixelmode: text

maven clean项目后,重新启动项目
在这里插入图片描述
控制台就看到设置的logo了

图片转换成文本的网站
https://degraeve.com/img2txt.php
在这里插入图片描述
然后输入图片资源地址,点击ASCIIFY生成
在这里插入图片描述
就可以生成文本,保存下来。
在这里插入图片描述
然后修改application.yml

spring:banner:location: classpath:static/banner.txt
#    image:
#      location: classpath:static/banner.png
#      pixelmode: block

maven clean项目后,重新启动项目
在这里插入图片描述
当然,还是这个经典。
在这里插入图片描述

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

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

相关文章

LangChain+ChatGLM大模型应用落地实践(一)

LLMs的落地框架&#xff08;LangChain&#xff09;&#xff0c;给LLMs套上一层盔甲&#xff0c;快速构建自己的新一代人工智能产品。 一、简介二、LangChain源码三、租用云服务器实例四、部署实例 一、简介 LangChain是一个近期非常活跃的开源代码库&#xff0c;目前也还在快速…

使用vscode进行远程开发服务器配置

1.下载vscode 2.给vscode 安装python 和 remote ssh插件 remote—SSH扩展允许您使用任何具有SSH服务器的远程机器作为您的开发环境。 3.安装remote-SSH插件之后&#xff0c;vscode左侧出现电脑图标&#xff0c;即为远程服务&#xff0c;按图依次点击&#xff0c;进行服务器配置…

运维:18工作中常用 Shell 脚本, 强烈推荐

1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192…

访问者模式——操作复杂对象结构

1、简介 1.1、概述 访问者模式是一种较为复杂的行为型设计模式&#xff0c;它包含访问者和被访问元素两个主要组成部分。这些被访问的元素通常具有不同的类型&#xff0c;且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系…

TensorRT学习笔记--基于TensorRT部署YoloV3, YoloV5和YoloV8

目录 1--完整项目 2--模型转换 3--编译项目 4--序列化模型 5--推理测试 1--完整项目 以下以 YoloV8 为例进行图片和视频的推理&#xff0c;完整项目地址如下&#xff1a;https://github.com/liujf69/TensorRT-Demo git clone https://github.com/liujf69/TensorRT-Demo.…

PostgreSql 进程及内存结构

一、进程及内存架构 PostgreSQL 数据库运行时&#xff0c;使用如下命令可查询数据库进程&#xff0c;正对应上述结构图。 [postgreslocalhost ~]$ ps -ef|grep post postgres 8649 1 0 15:05 ? 00:00:00 /app/pg13/bin/postgres -D /data/pg13/data postgres …

一篇聊聊JVM优化:堆

一、Java 堆概念 1、简介 对于Java应用程序来说&#xff0c;Java堆&#xff08;Java Heap&#xff09;是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享 的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例&#xff0c;Java 世界…

MongoDB文档--架构体系

阿丹&#xff1a; 在开始学习先了解以及目标知识的架构体系。就能事半功倍。 架构体系 MongoDB的架构体系由以下几部分组成&#xff1a; 存储结构&#xff1a;MongoDB采用文档型存储结构&#xff0c;一个数据库包含多个集合&#xff0c;一个集合包含多个文档。存储形式&#…

Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析

文章目录 一、Quartz 基本介绍二、Quartz Java 编程1、文档2、引入依赖3、入门案例4、默认配置文件 三、Quartz 重要组件1、Quartz架构体系2、JobDetail3、Trigger&#xff08;1&#xff09;代码实例&#xff08;2&#xff09;SimpleTrigger&#xff08;3&#xff09;CalendarI…

python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句 呈现效果 代码 # -*- coding:utf-8 -*- # Time : 2023/8/2 17:50 # Author: 水兵没月 # File : excel_2_mysql建表语句.py import reimport pandas as pd import mysql.connectordb 库名mydb m…

ELK高级搜索(一)

文章目录 ELK搜索1&#xff0e;简介1.1 内容1.2 面向 2&#xff0e;Elastic Stack2.1 简介2.2 特色2.3 组件介绍 3&#xff0e;Elasticsearch3.1 搜索是什么3.2 数据库搜索3.3 全文检索3.4 倒排索引3.5 Lucene3.6 Elasticsearch3.6.1 Elasticsearch的功能3.6.2 Elasticsearch使…

电脑安装新系统不知道去哪里下载,看我就够了

大家在日常生活中肯定都会遇到电脑安装系统的需求&#xff0c;如果去微软官方购买正版的系统又很贵&#xff0c;又不太想花这个冤枉钱&#xff0c;这个时候我们就不得不去网上查找一些免费好用的系统&#xff0c;可是百度一下&#xff0c;或者Google一下&#xff0c;各种下载系…

Android性能优化—卡顿分析与布局优化

一、什么是卡顿&#xff1f;或者说我们怎么感知APP卡顿&#xff1f; 这里面涉及到android UI渲染机制&#xff0c;我们先了解一下android UI是怎么渲染的&#xff0c;android的View到底是如何一步一步显示到屏幕上的&#xff1f; android系统渲染页面流程&#xff1a; 1&…

短视频矩阵营销系统技术开发者开发笔记分享

一、开发短视频seo抖音矩阵系统需要遵循以下步骤&#xff1a; 1. 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 2. 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的…

[STL]详解list模拟实现

[STL]list模拟实现 文章目录 [STL]list模拟实现1. 整体结构总览2. 成员变量解析3. 默认成员函数构造函数1迭代器区间构造函数拷贝构造函数赋值运算符重载析构函数 4. 迭代器及相关函数迭代器整体结构总览迭代器的模拟实现begin函数和end函数begin函数和end函数const版本 5. 数据…

FreeIPA Server/Client不同版本组合,对podman rootless container的支持

FreeIPA Server/Client不同版本组合&#xff0c;对podman rootless container的支持 根据实验&#xff0c; CentOS 7.9 yum仓库自带的FreeIPA Server 4.6.8&#xff0c; ipa client版本支持CentOS 7.9 yum仓库自带的FreeIPA Client 4.6.8不支持subids&#xff0c;podman调用…

机器学习-Basic Concept

机器学习(Basic Concept) videopptblog Where does the error come from? 在前面我们讨论误差的时候&#xff0c;我们提到了Average Error On Testing Data是最重要的 A more complex model does not lead to better performance on test data Bias And Variance Bias(偏差) …

re学习(26)攻防世界-re-BABYRE(IDA无法分析出函数-代码混淆)

题目链接&#xff1a;https://adworld.xctf.org.cn/challenges/list elf是一种对可执行文件&#xff0c;目标文件和库使用的文件格式&#xff0c;跟window下的PE文件格式类似。载入IDA后如果需要对此文件进行远程调试&#xff0c;需要用linux系统&#xff0c;比如说Ubuntu&…

【机器学习】西瓜书学习心得及课后习题参考答案—第3章线性模型

过了一遍第三章&#xff0c;大致理解了内容&#xff0c;认识了线性回归模型&#xff0c;对数几率回归模型&#xff0c;线性判别分析方法&#xff0c;以及多分类学习&#xff0c;其中有很多数学推理过程以参考他人现有思想为主&#xff0c;没有亲手去推。 术语学习 线性模型 l…

排序八卦炉之冒泡、快排

文章目录 1.冒泡排序1.1代码实现1.2复杂度 2.快速排序2.1人物及思想介绍【源于百度】2.2hoare【霍尔】版本1.初识代码2.代码分析3.思其因果 3.相关博客 1.冒泡排序 1.1代码实现 //插入排序 O(N)~O(N^2) //冒泡排序 O(N)~O(N^2) //当数据有序 二者均为O(N) //当数据接近有序或…