springboot 历史版本文档_乘风破浪,SpringBoot入门

SpringBoot入门篇

前言

在普通的java项目中,大量的xml文件配置起来相当繁琐,导致了开发效率非常低下,整合第三方框架的配置可能会存在冲突问题导致部署效率低,打包方式是将项目打成一个war包放入到tomactwebapps目录下执行。简单来说,传统的开发方式有以下令人苦恼的的特点

  • 笨重的开发
  • 繁琐的配置
  • 低下的开发效率
  • 复杂的部署流程
  • 集成第三方难度大

为了解决以上问题,SpringBoot被提出来了,它设计的目的就是为了简化Spring应用的初始搭建及开发过程,其约定大于配置,去繁从简。

看到这里,你觉得我是在吹牛逼,SpringBoot真的有那么优秀么?如果,你还是不信,咱们去官网的开发文档瞅一瞅,

打开SpringBoot官网,打开文档,让我们一探究竟。

9e2ecd6c5ef67aa2592f8de8c6594177.png

文档里有这样一段话介绍SpringBoot框架的特点

136c3bbf91fd2282f91c7c33393b2f97.png

因为全是英文,我直接精炼下给你看,SpringBoot的优点总结如下:

  • 快速整合第三方框架(Maven依赖关系,Maven继承)
  • 打包方式完全采用注解,采用注解方式启动SpringMVC,SpringBoot Web组件集成SpringMVC框架
  • 简化xml配置
  • 内置嵌入Http服务器(默认为Tomcat、Jetty),降低了对环境的要求
  • 最终以java应用程序进行执行(SpringBoot项目中没有Web.xml),运行中应用状态的监控。
  • Starters自动依赖于版本控制

工欲善其事,必先利其器,既然SpringBoot有那么多优点,我们肯定是要好好学的。在学习SpringBoot之前,需要搭建SpringBoot工程,那么问题来了,正在看文章的你知道怎么搭建SpringBoot工程么?它有几种方式呢?这些方式各自有什么特点及联系?工程是如何启动的呢?

文章目录

1、SpringBoot创建的三种方式

2、程序是如何执行的

3、目录结构

方式一:网上在线创建

这种方式是在网上在线创建,然后可以导出压缩包,解压后的文件就是一个SpringBoot工程文件。

访问https://start.spring.io/,打开后就是一个创建工程页面,

284c8ab0df2d2401be603f9946c3b2f4.png

Project:选择创建工程的方式,可以使用Maven或者Cradle,这里我们采用Maven方式创建

Language:开发语言的选择,我们选择的Java

SpringBoot: SpringBoot的版本,选择的是2.3.3

Project Metadata: 项目信息

Group 和 Artifact :项目坐标

Name:项目名称

Description:对工程的描述

Package name: 项目内的包名称

Packaging:打包方式,我们这里的选择的是jar包

Java: Java语言的版本,这里选择是11

Dependencies:添加依赖,这里我们仅仅添加Spring Web,它包含了Spring、SpringMVC一整套东西

每个选项都选择好,就可以直接生成一个工程文件压缩包了,我们只需要使用开发工具(Intellij IDEA)打开即可。

方式二:使用IDEA的spring Initializer

方式二是在IDEA使用Spring Initializer直接创建

953930729d659f6453ddf89cc49f2b7c.png

可以看出,Spring Initializer与方式一相同,默认采用https://start.spring.io创建

0d566df852846638688705592663f311.png
5014fef34b9d0520339581830b9bc61c.png

同方式一相同,填写坐标、语言、项目名称、项目描述和加载依赖等信息。

NOTE

方式一和方式二创建工程时都需要联网,本质上都是在https://start.spring.io网址上完成的,一旦网址加载速度慢或者打不开。因为SpringBoot工程本质上就是一个Maven工程,我们可以在Maven工程的基础上改造为SpringBoot工程

方式三:改造Maven工程创建SpringBoot

我们首先创建一个Maven工程

e92d840d6e3fb2cc59c0eaf57021adc5.png

填写坐标

183fdb844988ab3f1d316490f593afc7.png

确定项目名称

1c3c70d4a9c96bd10dab47c5ba1ff009.png

在pom文件中加入以下信息


<parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.3.RELEASEversion>
    parent>

  <dependencies>
      
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

    dependencies>
   

添加启动类


@EnableAutoConfiguration
public class Demo3Application {
        public static void main(String[] args) {
            SpringApplication.run(Demo3Application.class, args);
        }
    }

深入理解程序的执行

1、Pom文件

1、父项目

  • 父项目
<parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.3.RELEASEversion>
    parent>
  • spring-boot-starter-parent的父项目是
<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-dependenciesartifactId>
    <version>2.3.3.RELEASEversion>
    <relativePath>../../spring-boot-dependenciesrelativePath>
  parent>

spring-boot-dependencies管理了SpingBoot应用中的所有依赖,它是SpringBoot的版本仲裁中心,以后我们导入依赖时默认是不需要写版本的(没有在dependencies里面管理的依赖自然需要声明版本号) 。

2、启动器

 <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>

spring-boot-starter: 是SpringBoot的场景启动器,spring-boot-starter-web帮我们导入了web模块正常运行所依赖的组件

深入spring-boot-starter-web的底层,我们可以看到它集成常用web模块

<dependencies>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starterartifactId>
      <version>2.3.3.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-jsonartifactId>
      <version>2.3.3.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-tomcatartifactId>
      <version>2.3.3.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webartifactId>
      <version>5.2.8.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>5.2.8.RELEASEversion>
      <scope>compilescope>
    dependency>
  dependencies>

NOTE:Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

2、主程序类(入口类)

@SpringBootApplication//@SpringBootApplication 来标注一个主程序类,说明这是一个SpringBoot应用
public class demo1 {
    public static void main(String[] args) {
  //让Spring应用启动起来
        SpringApplication.run(demo1.class,args);
    }
}

@SpringBootApplication:标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用

打开SpringBootApplication的底层,发现它是一个组合注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
//包扫描,扫描的是与启动类同一层的包及其子包
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
  • @SpringBootConfiguration表明是SpringBoot的配置类

打开@SpringBootConfiguration底层

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

@Configuration:表明是一个配置类,配置类的作用等同于配置文件

  • EnableAutoConfiguration

    @EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效。

打开@EnableAutoConfiguration

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包

@Import({Registrar.class})

将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器

@Import(AutoConfigurationPackages.Registrar.class)

给容器导入组件

EnableAutoConfigurationImportSelector:导入哪些组件的选择器

将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器,会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件, 并配置好这些组件。

3、resources文件夹下的目录结构

  • static:保存所有的静态资源;js css  images
  • templates:保存所有的模板页面(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页 面),可以使用模板引擎(freemarker、thymeleaf)
  • application.properties:Spring Boot应用的配置文件,可以修改一些默认设置

关注公众号,让我们每天进步一点6adec5cd7d355c9363436096bbbbc048.png

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

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

相关文章

简洁直观解释精确率、召回率、F1 值、ROC、AUC

混淆矩阵 当我们在做二分类预测时&#xff0c;把预测情况与实际情况的所有结果两两混合&#xff0c;结果就会出现以下4种情况&#xff0c;就组成了混淆矩阵。 P&#xff08;Positive&#xff09;&#xff1a;代表正样本N&#xff08;Negative&#xff09;&#xff1a;代表负样…

基于Tensorflow搭建卷积神经网络CNN(水果识别)保姆及级教程

项目介绍 TensorFlow2.X 搭建卷积神经网络&#xff08;CNN&#xff09;&#xff0c;实现水果识别。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠&#xff0c;然后经过全连接层&#xff0c;最后用softmax映射为每个类别的概率&#xff0c;概率最大的即为识别结果…

如何编写高性能的C#代码(四)字符串的另类骚操作

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。作者介绍&#xff1a;史蒂夫戈登&#xff08;Steve Gordon&#xff09;是Microsoft MVP&#xff0c;Pluralsight的作者&#xff0c;…

statusbar 尺寸 显示图标_移动端页面设计规范尺寸大起底 - 椰树飘香

移动端尺寸繁多&#xff0c;包括IOS和安卓&#xff0c;尺寸多达十余种&#xff0c;所以移动页面尺寸的适配一直是前端和设计的头疼。今天来总结一下当前市场上的一些移动端尺寸&#xff0c;方便设计师和前端去考虑适配。但是最好还是针对自己的产品做调查&#xff0c;根据数据去…

新建项目上传gitee(码云)教程

登录码云 新建一个仓库后&#xff0c;复制HTTPS地址&#xff1a; 本地项目操作 打开需要上传gitee的项目文件夹&#xff0c;并打开Git Bash窗口 本地仓库初始化&#xff1a; git init添加到暂存区 git add .提交到本地仓库 git commit -m "first commit"关联到…

OpenSilver: 通过WebAssembly 复活Silverlight

本月早些时候&#xff0c;Userware发布了第一个版本的OpenSilver&#xff0c;微软Silverlight 的开源重新实现。OpenSilver 通过WebAssembly 实现无需任何其他插件在 浏览器上运行。OpenSilver 的当前版本可作为"技术预览"版本提供&#xff0c;它涵盖了大约 60% 的原…

db2有主键时默认hash分区_MySQL分区表最佳实践

前言&#xff1a;分区是一种表的设计模式&#xff0c;通俗地讲表分区是将一大表&#xff0c;根据条件分割成若干个小表。但是对于应用程序来讲&#xff0c;分区的表和没有分区的表是一样的。换句话来讲&#xff0c;分区对于应用是透明的&#xff0c;只是数据库对于数据的重新整…

程序员过关斩将-- 喷一喷坑爹的面向UI编程

点击上方“蓝字”关注我们菜菜哥&#xff0c;求你个事呗&#xff1f;说来听听&#xff0c;假装你男朋友可不干不是哦&#xff0c;是正经事。前几天一个项目UI改了&#xff0c;好多人跟着加班修改&#xff0c;怎么样尽量避免这种情况呢&#xff1f;UI修改顶多和客户端开发人员关…

python二维散点分布图_深入理解皮尔逊相关系数amp;python代码

1.常见理解误区&#xff08;1&#xff09;计算出变量A和变量B的皮尔逊相关系数为0&#xff0c;不代表A和B之间没有相关性&#xff0c;只能说明A和B之间不存在线性相关关系。例&#xff1a;温度和冰淇淋销量之间的散点图像如下&#xff0c;可以发现大致成二次函数图像&#xff0…

hdu4911 Inversion-归并排序

解题思路&#xff1a; 如果原序列的逆序对数大于交换次数&#xff0c;那么最少的逆序对数量就是原序列逆序对-交换次数。 如果原序列的逆序对数小于等于交换次数&#xff0c;那么最少的逆序对数量为0&#xff0c;因为交换次数超过逆序对数&#xff0c;可以把这些逆序对全部消除…

【.net core】电商平台升级之微服务架构应用实战

一、前言这篇文章本来是继续分享IdentityServer4 的相关文章&#xff0c;由于之前有博友问我关于微服务相关的问题&#xff0c;我就先跳过IdentityServer4的分享&#xff0c;进行微服务相关的技术学习和分享。微服务在我的分享目录里面是放到四月份开始系列文章分享的&#xff…

c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

「今天是学习C语言第 148 天」纸上学来终觉浅&#xff0c;绝知此事要躬行。—— 陆游「冬夜读书示子聿」# 静态链表使用数组实现&#xff0c;利用数组下标代替指针&#xff0c;从而实现数据结点之间的先后关系。实现要点&#xff1a;1.数组下标为0的位置为头结点&#xff0c;指…

集成平台集群任务动态分派

源宝导读&#xff1a;MIP集成平台是为了解决企业大量异构系统之间快速、稳定集成的需要&#xff0c;助力企业数字化转型&#xff0c;明源云自主研发的平台系统。本文将对"事件任务分派"场景的架构设计以及实践成果进行分享。背景MIP集成平台是为了解决企业大量异构系…

dotcpp1115 DNA-打印图案

题目描述 小强从小就喜欢生命科学&#xff0c;他总是好奇花草鸟兽从哪里来的。终于&#xff0c; 小强上中学了&#xff0c;接触到了神圣的名词–DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮&#xff0c;“要是能画出来就好了” 小强喊道。现在就请你帮助他吧 输入 输…

akb48_AKB48里历史——六年的终结

注&#xff1a;这是2012年发行的一本在BUBUKA连载的基础上补充了一些内容的粉丝公式教科书&#xff0c;从里面找了部分内容翻译了一下&#xff0c;节选的内容主要说的是2011年的事情&#xff0c;以当时作者的视角&#xff0c;是AKB48第一次新老粉丝换代的时期。前田敦子和大岛优…

[头脑风暴] 解读Docker Bridge网络模型

背景这几天在研究Kubernetes&#xff0c; 遇到一个有意思的nodejs镜像&#xff1a;luksa/kubia# 不带端口映射启动容器 docker run -it -d luksa/kubia # 连接到默认的Bridge网桥&#xff0c;容器IP是 172.17.0.2之后&#xff0c;在宿主机使用容器IP和8080 端口可访问该容器…

kodi pvr 不能安装_「家庭影音串流」电视最强播放器KODI使用方法

本文作者&#xff1a;空翻的帕兹文章适用电脑手机等全平台设备&#xff0c;在用户没有nas的情况下如何使用串流电视最强播放器KODIKodi是由XBMC基金會開發的開源媒體播放器&#xff0c;原名XBMC(最後一個以XBMC命名的版本是13.2「Gotham」&#xff0c;14.0 「Helix」是第一個以…

docker部署flask项目

项目本地运行 1.到github或者自己创建一个flask项目&#xff0c;确保在本地是可以运行成功的 2.上传到自己的代码仓库 服务器部署 1.安装docker yum install docker -y2.配置加速器 DaoCloud加速器采用自主研发的智能路由及缓存技术&#xff0c;并引入了现金的协议层优化…

.NET Core开发实战(第24课:文件提供程序:让你可以将文件放在任何地方)--学习笔记...

24 | 文件提供程序&#xff1a;让你可以将文件放在任何地方文件提供程序核心类型&#xff1a;1、IFileProvider2、IFileInfo3、IDirectoryContentsIFileProvider 是访问各种各样文件提供程序的接口通过这样子抽象的定义&#xff0c;让我们与具体的抽象文件的读取的代码进行了隔…

连接mysql数据库_解决Navicat连接MySQL数据库报错问题

今天在用Navicat连接另外一台主机上的MySQL时报错&#xff1a;Host is not allowed to connect to this MySQL server默认安装的mysql无法远程连接是因为MySQL默认配置了不支持远程连接引起的。解决方法&#xff1a;一、本地主机上登录root用户找到mysql.exe所在路径&#xff0…