Spring Boot基础

文章目录

  • 一、Spring Boot
    • 1. Spring的缺点
    • 2. Spring Boot 改变了什么
    • 3. Spring Boot项目搭建
    • 4. 热部署
    • 5. 依赖管理
    • 6. 代码生成器
    • 7. 日志
    • 8. 日期转换
    • 9. 接口文档
    • 10. 打包部署
    • 11. 自动装配

一、Spring Boot

1. Spring的缺点

在Spring Boot出现以前,使用Spring框架的程序员是这样配置web应用环境的,需要大量的xml配置。下图展示了在xml配置的时代和Spring Boot的配置量的差别。
在这里插入图片描述

  • 随着web项目集成软件的不断增多,xml配置也不断的增多,xml配置文件也在不断地增多,项目的依赖管理也越发的复杂。Spring框架也因此饱受争议,配置文件难以理解且容易出错。
  • xml配置文件不但复杂,而且绝大部分属于模板配置,也就是说有80%以上的配置是不断重复的。在这个web项目里面这样配置,挪到另一个项目里面这部分配置仍然相同。

2. Spring Boot 改变了什么

Spring Boot的配置方式,就像是插头插座,就是这个标准。你第三方开源类库想接入进来,你就按照这个标准做一个starter的适配。Spring MVC方式就像是手动接电线,很灵活,但是不同的人接出来的效果千差万别,而且很容易出错。Spring Boot虽然灵活性不如Spring MVC的方式,并且你也不太清楚插座里面的线路是什么样,但就是方便易用。话说回来,当你习惯使用插头插座,你还期望自己是个电工不成?

这里有一个很重要的概念: 约定大于配置。你遵守一些规定,会让你的开发变得更加容易。
在这里插入图片描述

3. Spring Boot项目搭建

# spring Initializr 方法1 选择spring Initializr创建项目   http://start.aliyun.com2 填写项目名称3 选择springboot的版本,如果没有想要的版本,先随便选一个,然后去pom文件中修改4 勾选需要的模块,比如web  sql等5 项目会自动生成启动类6 编写controller 启动项目测试

也可以用maven的方式,没有这个简单和方便

在实际开发中,pom配置文件不需要你去关心,练习中可以直接复制配置文件。

在我们搭的这套环境中有:代码生成器,和接口文档生成的插件。要求自己能配置起来。
在这里插入图片描述

4. 热部署

  1. 设置 file- setting - bulid - compiler,勾选build project automatically ,并且保存

  2. ctrl+shift+atl + / , 选择registry , 勾选compiler.automake.allow.when.app.running

  3. 在依赖中添加spring-boot-devtools (dev开发环境的工具)
    在这里插入图片描述
    在这里插入图片描述

<!--devtools热部署-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true</scope>
</dependency>

另一种开发中常用的热部署:JRebel https://blog.csdn.net/weixin_42831477/article/details/82229436

5. 依赖管理

  1. spring-boot-starter-parent 依赖: 底层依赖spring-boot-dependenies, 有个properties标签,里面包含了其他依赖的版本。可以理解为就是一个版本的管理器

  2. spring-boot-starter-web 的理解:在springboot项目中引入此启动器,底层的原理是:系统写好了一个spring-boot-starter-web项目,这个项目依赖于spring-boot-starter-json, tomcat,web,webmvc。个人认为就是一种模块之间的依赖传递。
    在这里插入图片描述
    在这里插入图片描述

6. 代码生成器

  • 使用的是mybatis代码生成器
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>src/main/resources/generatorConfig.xml</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration>
</plugin>
  • generatorConfig.xml
# 1 数据库驱动包位置
# 2 数据库链接URL、用户名、密码
# 3 实体类生成位置
# 4 mapper和xml位置
# 5 指定用哪个表来生成

@RestController = @ResponseBody + @Controller

@RequestBody 前端给你传的数据是json格式的,可以直接封装到java对象中

404 找不到路径

403 禁止访问

405 请求方式不匹配

7. 日志

logback-spring.xml

需要注意以后要修改包名,其他的不用动
在这里插入图片描述
怎么打印日志

Log log = LogFactory.getLog(类名.class);

log.info(日志内容)

8. 日期转换

  • 导入依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.1</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.10.1</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.10.1</version>
</dependency>
  • 消息转换器
package com.xinzhi.config;import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class DateConverter implements Converter<String, Date> {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic Date convert(String source) {try {return sdf.parse(source);} catch (ParseException e) {e.printStackTrace();}return null;}
}
  • 配置文件中添加
spring.jackson.date-format =yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

9. 接口文档

https://smart-doc-group.github.io/#/zh-cn/?id=smart-doc
在这里插入图片描述

  • 引入插件
 <plugin><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>1.1.7</version><configuration><!--指定生成文档的使用的配置文件,配置文件放在自己的项目中--><configFile>./src/main/resources/smart-doc.json</configFile><!--指定项目名称--><projectName>sboot</projectName><!--smart-doc实现自动分析依赖树加载第三方依赖的源码,如果一些框架依赖库加载不到导致报错,这时请使用excludes排除掉--><excludes><!--格式为:groupId:artifactId;参考如下--><exclude>com.alibaba:fastjson</exclude></excludes><!--1.0.8版本开始,插件提供includes支持--><!--smart-doc能自动分析依赖树加载所有依赖源码,原则上会影响文档构建效率,因此你可以使用includes来让插件加载你配置的组件--><includes><!--格式为:groupId:artifactId;参考如下--><include>com.alibaba:fastjson</include></includes></configuration>
</plugin>
  • 指定配置文件
    在这里插入图片描述

  • 记得要将实体类和controller的注解都补充完整

  • 生成指定格式文件

10. 打包部署

  • 修改启动类名称
    在这里插入图片描述
  • 点击package
    在这里插入图片描述
  • 将zip包放到服务器上,并且解压
  • 修改shell脚本
    在这里插入图片描述
  • 上传到linux,并且修改执行权限 chmod 777 run.sh
  • 启动脚本 ./run start

11. 自动装配

  • @SpringBootApplication是一个复合注解

  • @SpringBootConfiguration

  • @EnableAutoConfiguration

  • @ComponentScan。
    在这里插入图片描述

  • @SpringBootConfiguration,就是一个配置类,@Configuration是底层的核心注解,作用和spring配置文件中往spring容器中注入对象(),只是springboot封装了Configuration, 叫成了SpringBootConfiguration。

  • @EnableAutoConfiguration是由@AutoConfigurationPackage ,@Import({AutoConfigurationImportSelector.class})两个注解组成

    • @AutoConfigurationPackage是由 @Import({Registrar.class})实现的,核心方法是registerBeanDefinitions(),就是为了获取启动类所在的包,为后面扫描组建做准备。
    • @Import({AutoConfigurationImportSelector.class}) 核心类是AutoConfigurationImportSelector。
      在这里插入图片描述
  • @Import({AutoConfigurationImportSelector.class}) 是由AutoConfigurationImportSelector这个类实现的
    在这里插入图片描述

 protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {// 获取@EnableAutoConfiguration标注类的元信息。(exclude,excludeName)AnnotationAttributes attributes = this.getAttributes(annotationMetadata);// 获取自动装配类的候选类名称。List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);//去重,排除重复的configurationsconfigurations = this.removeDuplicates(configurations);//获取自动装配组件的排除名单。Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);//检查排除类是否合法this.checkExcludedClasses(configurations, exclusions);//移除所有的排除名单configurations.removeAll(exclusions);//进行过滤,autoConfigurationMetadata充当过滤条件。configurations = this.getConfigurationClassFilter().filter(configurations);//自动装配的导入事件this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);}}
# 自动装配原理:
springboot启动时,是依靠启动类的main方法来进行启动的,而main方法中执行的是SpringApplication.run()方法,而SpringApplication.run()方法中会创建spring的容器,并且刷新容器。而在刷新 容器的时候就会去解析启动类,然后就会去解析启动类上的@SpringBootApplication注解,而这个注解是个复合注解,这个注解中有一个@EnableAutoConfiguration注解,这个注解就是开启自动配置,这个注解中又有@Import注解引入了一个AutoConfigurationImportSelector这个类,这个类会进过一些核心方法,然后去扫描我们所有jar包下的META-INF下的spring.factories文件,而从这个配置文件中去找key为EnableAutoConfiguration类的全路径的值下面的所有配置都加载,这些配置里面都是有条件注解的,然后这些条件注解会根据你当前的项目依赖的pom以及是否配置了符合这些条件注解的配置来进行装载的。
  • @ComponentScan 组件扫描和 @Import({Registrar.class}) 配合使用,就是为了扫描和启动类同一级包名或包名下面所有的组件。

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

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

相关文章

二叉树OJ题之三

哈喽伙伴们&#xff0c;有一段时间没更新博客了&#xff0c;主要是这段时间要准备学校的期末考试&#xff0c;所以没有把部分时间分给博客&#xff0c;今天我们一起去接着看二叉树递归有关的OJ题&#xff0c;今天我们要学习的是 判断相同的树&#xff0c;力扣题目--100 &…

JSONArray添加JSONObject数据组装后,toString()发现值有{“$ref“:“$[0]“}乱码问题

出现这个问题是FastJson的循环引用造车的&#xff0c;可以手动设置取消FastJson的循环引用的检查。代码如下&#xff1a; JSONArray oaArr new JSONArray(); //取消JSON循环引用检查 String s JSON.toJSONString(oaArr, SerializerFeature.DisableCircularReferenceDetect)…

龙芯loongarch64服务器编译安装pytorch

前言 PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个基于Python的可续计算包。在通过龙芯开源仓库下载依赖包后,执行import torch后,发现其中安装的"pytorch"就无法正常使用,这里就演示下pytorch整个编译流程。 1、环境准…

推荐一款Excel快速加载SQL的插件,方便又好用

如果告诉你只需要双击一下&#xff0c;SQL数据库中存放在表里面的数据&#xff0c;就能加载到你的Excel中&#xff0c;你想不想要&#xff1f; 今天给大家推荐一款好用的Excel插件&#xff0c;安装简单&#xff0c;使用方便&#xff0c;是经常使用SQL数据库的不二。 这款插件…

Web开发学习HTTP协议、通过浏览器控制台学习HTTP协议。

文章目录 HTTP协议1.HTTP协议是什么&#xff1f;2.HTTP协议的特点3.什么是URL?4.通过浏览器控制台学习HTTP协议Request Headers请求数据格式说明Response Headers请求数据格式说明 5.HTTP工作原理 HTTP协议 1.HTTP协议是什么&#xff1f; HTTP协议是一种超文本传输协议&…

前端实现主题(深色模式)切换的几种方案

方案一&#xff1a;link 动态引入 通过改变link 标签的 href 属性实现动态修改样式&#xff08;暂不推荐这种方案&#xff09; 优点&#xff1a;实现了按需加载&#xff0c;提高了性能&#xff1b; 缺点&#xff1a;动态加载样式文件&#xff0c;可能会因为网络问题导致样式…

使用Scanner扫描器和if语句来判断QQ等级的活跃程度

一、主要特点 总体使用try包围起来&#xff0c;用到了Scanner扫描器&#xff0c;还用到了若干if语句。 二、运行代码 import java.util.Scanner; public class QQtest {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) {System.out.pr…

吉利护航,宣称比友商“更懂车”,魅族造车的底气与底色

继小米、华为后&#xff0c;又一家手机厂商宣布跨界造车。 在近日举办的2023魅族秋季无界生态发布会上&#xff0c;星纪魅族集团&#xff08;下称“魅族”&#xff09;董事长兼CEO沈子瑜宣布&#xff0c;魅族正式进入汽车市场&#xff0c;将在2024年第一季度启动“DreamCar共创…

【STM32】STM32学习笔记-课程简介(01)

00. 目录 文章目录 00. 目录01. 课程简介02. 硬件设备03. 软件工具04. 硬件套件4.1 面包板和跳线/飞线4.2 杜邦线和STM32最小系统板4.3 STLINK和OLED显示屏4.4 LED和按键4.5 电位器和蜂鸣器4.6 传感器和旋转编码器4.7 USB转串口和MPU60504.8 Flash闪存和电机模块4.9 SG90舵机 0…

win10与 vm虚拟机win7共享文件夹创建

1:在win10&#xff08;主机&#xff09;电脑先随意共享一个文件夹 2&#xff1a;在win10&#xff08;主机&#xff09;上创建一个网络映射 右键此电脑选择映射网络驱动器 成功后会多出这个网络位置 3&#xff1a;win7虚拟机设置 在虚拟机中点击计算机右键添加一个网络位置

C# Onnx CenterNet目标检测

目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name&#xff1a;input.1 tensor&#xff1a;Float[1, 3, 384, 384] --------------------------------------------------------------- Outputs ------------------------- name&a…

安卓开发引入网络图片

<ImageViewandroid:id"id/img01"android:layout_width"match_parent"android:layout_height"200dp"android:layout_weight"1"/>ImageView加载网路图片 第一步&#xff1a;添加网络权限 <uses-permission android:name"…

vue使用实现录音功能js-audio-recorder

前言 最近项目中需要实现一个录音上传功能&#xff0c;用于语音评论可以上录音。 下载插件&#xff1a; npm i js-audio-recorder完整代码 <template><div style"padding: 20px;"><h3>录音上传</h3><div style"font-size:14px"…

“轻松管理视频文件:高效归类与统一重命名“

随着电子设备的普及&#xff0c;我们的视频文件可能来自各种不同的源头&#xff0c;如何高效地管理和查找这些文件成为了一个问题。今天&#xff0c;我们将为您提供一个完美的解决方案——自动归类并统一重命名视频文件。 首先&#xff0c;第一步&#xff0c;我们要进入文件批…

我一人全干!之vue3后台管理中的大屏展示。

使用大屏展示的时候有很多种场景&#xff0c;众多场景都是为了实现大屏自适应。 大屏&#xff0c;顾名思义&#xff0c;就是放在一个固定的屏幕上看的&#xff0c;即使你不做自适应&#xff0c;放在一个固定的屏幕上看也没啥问题&#xff0c;但是很多做大屏的是为了在PC端看&am…

【JAVA】Maven构建java-grpc-protobuf代码生成测试

本次是通过Maven工具构建Java测试工程&#xff0c;需要将原本通过gradle构建的项目需要通过maven构建加入公司代码库&#xff0c;通过Maven构建涉及到接下来要介绍的插件&#xff0c;总是发现pom.xml编译不通过&#xff0c;看到网上都是千篇一律的插件配置&#xff0c;自己就是…

软件产品研发过程 - 二、概要设计

软件产品研发过程 - 概要设计 相关系列文章 软件产品研发管理经验总结-管理细分 软件研发管理经验总结 - 事务管理 软件研发管理经验总结 - 技术管理 软件产品研发过程 - 二、概要设计 目录 软件产品研发过程 - 概要设计一、概要设计概述二、概要设计过程1、模块概述2、应用场景…

68从零开始学Java之Set集合都有哪些特性

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥带大家学习了List集合的用法和特性&#xff0c;尤其是对ArrayList和L…

无人奶柜:零售业的自助革命

无人奶柜&#xff1a;零售业的自助革命 无人奶柜作为零售业的一项创新技术&#xff0c;正在改变人们购买奶制品的方式&#xff0c;并对零售业产生深远的影响。它的出现提供了更便捷、高效、便利的购物体验&#xff0c;节省了人力成本&#xff0c;同时也为零售商带来了创新机会和…

大师学SwiftUI第18章Part3 - 自定义视频播放器

视频 录制和播放视频对用户来说和拍照、显示图片一样重要。和图片一样&#xff0c;Apple框架中内置了播放视频和创建自定义播放器的工具。 视频播放器 SwiftUI定义了​​VideoPlayer​​视图用于播放视频。该视图提供了所有用于播放、停止、前进和后退的控件。视图包含如下初…