JavaEE进阶 - SpringBoot 的 概念、创建和运行 - 细节狂魔

x33g5p2x  于2022-07-20 转载在 Java  
字(4.7k)|赞(0)|评价(0)|浏览(271)

1.什么是Spring Boot?

什么是Spring Boot?

Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。
Spring Boot 翻译⼀下就是 Spring 脚⼿架,什么是脚⼿架呢?如下图所示:

盖房⼦的这个架⼦就是脚⼿架,脚⼿架的作⽤是砌筑砖墙,浇筑混凝⼟、⽅便墙⾯抹灰,装饰和粉刷的。
简单来说,就是使⽤脚⼿架可以更快速的盖房⼦。
⽽ Spring Boot 就是 Spring 框架的脚⼿架,它就是为了快速开发 Spring 框架⽽诞⽣的。
再来看个例子:
例如,以前铺路是这样的:【Spring】

改造之后的效率是这样的:【SpringBoot】

或者是这样的:

可以看到,每次新技术的诞⽣,带来的改进相⽐于之前的效率会有⼀个质的提升,⽽ Spring Boot 相⽐于Spring 也是如此

为什么要学Spring Boot?

SpringBoot的优点

快速集成框架,
Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。

内置运⾏容器,
⽆需配置 Tomcat 等 Web 容器,直接运⾏和部署程序。

快速部署项⽬,⽆需外部容器即可启动并运⾏项⽬。

可以完全抛弃繁琐的 XML,使⽤注解和配置的⽅式进⾏开发。

⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况。
PS::这个我其实在开篇 初识框架中,我就是以 SpringBoot,来讲解的。
因此,多的,我就不讲了。

关于监控杆指标,Spring Boot 有一个专门给它去做的 Actuator 监控指标。
然后我们去继承这个监控指标的话,可以看到 Spring 项目运行的情况(非常详细的细节)!
比如:
当前 Spring Boot 项目中,有多少个 bean,每个 bean 都是在那个平台上运行的;
JVM 的版本号是多少;当前项目中有多少个定时目录,有多少个缓存。。。
它都是有详细描述的。
而且,我们甚至可以通过网页方式,直接将 Spring Boot 项目 给关闭掉。
注意!是通过网页的方式!
就是说:通过本机的浏览器访问一个地址(生产服务器的一个Spring地址)。
访问之后,网页上就会有一个 “停止项目” 的按钮,一点,项目就关了。

可以这么说:SpringBoot 将 Spring 的所有 “痛点 / 缺陷” ,都解决了。
什么创建 根目录,xml配置文件,需要引入 spring-context 和 spring-beans 的依赖,Tomcat,部署项目。。。。都改成了内置!!!
就是不用我们去创建根目录 和 xml 配置文件,Spring Boot 都帮我们配置好了。直接拿着就用!
而且在部署项目的时候,不用再去下载 Tomcat 和 配置 Tomcat的环境了,因为这个,Spring Boot 也内置了!
总之,比起 Spring,好用的不是一星半点!!!

PS: Spring Boot,暂时没有发现缺点。。。
而且,还有一个更重要的学习原因:
现在的公司,几乎全部都是基于 Spring Boot 实现的项目。

另外,Spring Boot 有很多的插件

这些插件,可以让我们实现 开发环境 与 生产环境 的脱离。
这么说吧:
我们在开发环境中使用这些插件,就那 lombok 来说。
lombok 只有在编译之前,它是有用的。
编译之后,就没它的事了。

而 Spring Boot 就可以实现:在编译之前,lombok 就可以加到包里面。
但是!当我们大宝箱项目的时候,就会把 lombok 直接舍弃掉,反正也不用了!
这样的话,生产环境的包 和 我们本地运行的包,就完全是两个包。
生产环境的包,将 用不到的包都会筛选出来,删除掉。
只留下有用的。

如果,非要挑 Spring Boot 的 刺(缺点),还是有的!

1、我们在创建 Spring Boot 项目的时候,我会讲两种方式【1、网页,2、idea】、
这两种创建的方式,都会去拉取 Spring Boot 的 一个 jar 包(对应版本的工程目录)。
而这个拉取的工程目录,是国外网站的。
所以,就会导致 在某些情况下,我们去创建一个 String Boot 项目 可能会失败。
可以通过陪着国内源。只不过国内的源,版本都比较低

2、Spring Boot 升级的速度,非常快!!!
最快,一天就更新一次。。。
但是,差别并不大。
PS:在2.0版本的时候,版本改动带有的变化,是非常的!
但是,现在都已经到 7 版本了,改动带来变化不是很明显了! 逐渐趋于“稳定”了。

3、由于不用我们自己做配置,报错时很难定位。
【这是所有的高级框架的通病。】
Spring Boot 中,有一条规定:约定 大于 配置。
编码代码的视乎,遵守 约定 来写,比 遵守 配置 来写,更重要!
如果你不按照约定来写,你的代码就是有问题的!
另外,看日志是解决不了问题的。
日志,只会告诉你出了什么问题,不会像 错误信息栈那样,锁定出现错误的代码位置。
严格来说:这算是一个瑕疵,不算一个缺点,
因为你想啊,如果让我们去配置创建,这无疑是增加了我们的工作量。
严重影响我们程序员的幸福指数。
因此,我们更需要关注的是:Spring Boot 的 约定 大于 配置的思想!!!!

Spring Boot 项目创建

前置工作:配置国内源

直接参考这篇Spring 创建 和 使⽤文章即可

使用 idea 创建 Spring Boot 项目

这可以分为两个中情况:
1、idea 社区版
2、idea 专业版
如果你是社区版,需要安装一个插件。
反之,如果你是专业版,就可以不用安装插件了。

idea 社区版

需要安装一个 Spring Assistant 的插件

下面就可以开始创建 Spring Boot 项目了。

这里,略微说明一下

上面的 Spring Boot 的项目目录,都是从 初始化服务器 提供的 工程路径,来在线自动生成 我们当前项目目录的。

我们使用的是默认的初始化服务器,是从国外的网站上下载的。
而如果你使用的是 校园网,校园网是会屏蔽 一些国外的网站的。
而且,校园网的网速很慢!

解决的方法:使用国内源。
除了我前面提到的配置方法。
还有一个配置途径。
在我们创建 Spring Boot 项目 的时候,使用 自定义 初始化服务器 路径。

其它的地方都差不多!

唯一不同的就是:在引入框架支持的时候,多出了几个选项

idea 专业版

专业和社区版是差不多的,我就简略演示一下过程。

另外,使用国内源创建 Spring Boot 项目,专业版也是支持的!

网页版创建(了解)

如果你实在是非常懒。
idea版本 不想搞,或者 插件安不上 / 插件压根就搜不到,你就可以使用这种方式了。
注意!网页存在着缺陷。
如果没装插件的话,你通过网页的方式,可以把项目创建了。但是!我们在写 Spring Boot 项目的时候,尤其是配置文件的时候,可能没有 提示!!!
因为 那个插件(Spring Assistant)不光是包含了 Spring Boot 项目 的创建,还提供了针对 与 Spring Boot 项目的支持。
当我们去写一个东西的时候,它会有一个 提示。
尤其初学者,建议 插件 这个东西,还是必须要装的。
没提示,你就很容易写错。,还要导包等等。。。


优点:
所创建的项目的是一个 zip 的 包。
我们可以把这个包保存到本地,然后,就可以反复去使用。

假设我们要写一个项目 A ,解压这个压缩包,就可以去使用。
OK,后面我们又要去写一个 项目B,再去对这个 zip包,进行解压操作。
我们就又能得到一个新的项目。

而 idea 创建 的项目,只能使用一次。
想要在写一个,就需要再去new一个项目。

还有一种极端情况,就是官网崩了。
想知道我们的 idea 在 创建 Spring Bott 项目的时候,初始化服务器 都是 官网 拉去的资源。这一崩溃,idea 就无法创建 Spring Boot 项目了。
而 zip 包,就不存在这个问题了。
因为它存储在我们本地上,解压之后,就完整的新项目。

网页版创建 Spring Boot项目:
1、打开 Spring Boot 创建的网站:https://start.spring.io

下面我们就可以来创建 Spring Boot 项目了。

还没完!这是将 包 下载到本地了,而我们的目的:是在 idea中,使用它。

需要注意的是:在打开项目的时候,它还需要去下载依赖的。
所以你要等一会,等到 启动类 出现 小箭头,就可以使用了。
下面,我们来启动项目,看看能不能使用?

另外,这个 zip 文件包,你可以一直留着,反复解压使用。
因为解压之后,就是一个“空项目”嘛。

拓展:删除 项目中无用的目录和文件

在我们引入的工程目录,有一些是不需要的,是无效的。
通常我们在创建 好 Spring Boot 项目 后的 第一件事,就是删除 无效的文件。

Spring Boot 项目目录介绍

运行项目

通过URL的方法,来输出一个helloworld

我们学习 JavaEE 就是⽤来实现 Web 项⽬或接⼝的,⽽之前是 Spring 其实是⼀个普通 Java 项⽬,没办法直接和浏览器进⾏互动,所以接下来我们要⽤ Spring Boot 来实现和浏览器及⽤户的交互。
那么,如何实现呢?

我们再看看,类上面也加上 @RequestMapping,通过二级路径去访问方法。

Sring Boot 中 “约定 大于 配置” 的思想。

在编写上面编写项目代码的时候,其实就涉及到 “约定 大于 配置” 的思想。
不知道你们有没有发现,在我们创建 Spring Boot 项目的时候,是没有设置配置文件。【这是因为 Spring Boot 帮我们创建好了】

而我们在将一个类 注入 到 Spring Boot 中的时候,和 Spring一样,是通过五大类注解来完 成的。
但是!我们并没有在 配置文件中,并没有设定扫描路径!

那么,Spring Boot 是怎么确定 bean 的位置,就在 springb2 包下面的呢?
从而,将 有注解的类 注入到 Spring Boot 中的呢?

其实我在前面提过一句。
这正是 “约定 大于 配置” 思想的一种体现。
明明我们没有配置 扫描路径,但是Spring Boot 中 存在着一个“约定”。
将需要存入 Spring Boot 中的 bean,都放在 springB2 的 目录下。

也就是说:
自动 生成 example 目录 下的 唯一子目录,就是根目录(启动类所处于的目录),也就是默认的扫描路径。

Spring Boot 就会去扫描这个“根目录”下的类,是否带有五大类注解。
如果有,在Spring Boot 启动的时候,直接将其实例化,并存入到 Spring Boot 中。
如果没有,则跳过。

因为 bean 已经被实例化了,因此,我们才能直接访问到,并且有效果。

另外,想要验证也很简单!

将UserController类,放到其它目录中。【没有与 启动类 处于 同一个 目录下】
此时,再来通过浏览器访问程序,你们就能明白 “约定”了、

你就这么理解:
Spring Boot 将 Spring 的 配置文件 操作,给省略。
自动去生成一个 “根目录”(扫描路径)、
其扫描的规则,和 Spring 是 一模一样的。

将 启动类所处于的目录(根目录)下,所有带有注解的类,全部注入(托管)到 Spring Boot 中。

另外,Spring Boot 需要我们手动配置的地方很少,但是 Spring Boot 的设计思想是:“约定 大于 配置”。

意思就是:能约定的事情,就不需要我们去说动配置。
但是我们要知道有这么回事!

总结

Spring Boot 是为了快速开发 Spring ⽽诞⽣的.
Spring Boot 具备:
快速集成框架,Spring Boot 提供了启动添加依赖的功能,⽤于秒级集成各种框架。
内置运⾏容器,⽆需配置 Tomcat 等 Web 容器,直接运⾏和部署程序。
快速部署项⽬,⽆需外部容器即可启动并运⾏项⽬。
可以完全抛弃繁琐的 XML,使⽤注解和配置的⽅式进⾏开发。
⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况等特点。
Spring Boot 可使⽤ Idea 或⽹⻚创建,它的设计思想是约定⼤于配置,类上标注
@SpringBootApplication 就可以启动 Spring Boot 项⽬了。

相关文章