前言
这一部分就是关于Spring的部分了,在这里我们主要学习四个部分
1、Spring
2、Spring Boot
3、Spring NVC
4、MyBatis
这里特别对最后一个说一下,MyBatis。它是用来 代替 JDBC 编程,JDBC 作为Java 提供的一组 用来 操作数据库 的 API非常繁琐
1、获取数据源
2、与数据建立连接
3、编写 SQL 语句。
4、执行SQL
5、此时 SQL 已经执行完毕,然后需要我们去释放资源
所以重复的代码就很多,所以不推荐使用。这里我们一步一步来
一丶为什么学框架
- 学习框架相当于从“小作坊”到“工厂”的升级,小作坊什么都要自己做,工厂是组件式装配,特点就是高效。
- 框架更加易用、简单且高效
<1>框架的便捷性
什么意思呢?
1、 ⽆需配置 Tomcat,点击“运⾏”按钮就可以运⾏项⽬,Spring Boot 内置了 Web 容器(可直接运⾏)。
2、 快速添加外部 jar 包(依赖)。
3、 快速发布项⽬(使⽤ java -jar ⽅式就可以发布)。
4、 对象⾃动装配。
5、 …
<2>和servlet进行对比
我们传统的servlet怎么使用的呢?
1、创建一个 maven 项目
2、在 pom.xml 中 引入相关依赖
3、创建特定的目录
4、编写代码
5、打包
6、部署
7、验证程序
8、发布【使用 (Tomcat) 进行 程序的部署和发布】
光是这一连串的流程下来,就让人绝望,我们可以清楚的发现servlet有以下不足
1、添加外部 jar 不⽅便,容易出错,⽐如添加了⼀个不匹配的外部 jar 版本;
2、运⾏和调试的时候需要配置 tomcat 不⽅便;
3、 发布不⽅便,servlet 项⽬必须依靠外置的 tomcat(外置的 web 容器)运⾏。
4、 路由配置不⽅便,⼀个访问地址对应⼀个 Servlet 类。
5、…
而以上痛点问题,都可以通过 JavaEE 进阶框架解决,接下来我们一起来看。
二丶Spring核心和设计思想
<1>Spring是什么?如何理解Spring
先从第一个问题开始,啥是Spring?
Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。
所以总结一下:Spring就是包含了众多工具方法的loC容器
这里可能就有铁子会发问啥是容器?
容器是用容纳某种物品的(基本)装置。
是不是有点迷,那就想想我们的数据结构,List,Map。如果还是想不出来,那就再想想我们的Tomcat
List/Map -> 数据存储容器
Tomcat -> Web 容器
这里是不是好奇为啥Tomcat是一个容器呢?
但是 Tomcat 为什么是一个 Web 容器呢?
思考一下:
Tomcat 是用来运行 外部的项目,因此它是一个 Web 容器。
你有一个项目,想要运行。
肯定是要将项目部署到 Tomcat 的 webapps 目录底下,才可以运行。
此时,webapps 就是一个项目的容器
而 webapps 目录,就是 Tomcat 下面的一个子目录。
那么,我们将 Tomcat 称为是一个容器,没有任何问题
<2>IoC和DI是什么?区别?
IoC = Inversion of Control 翻译成中文是“控制反转”的意思,也就是说 Spring 是一个“控制反转”的容器,怎么理解这句话呢?
分成两点,第一个点是控制,第二个点是反转。
也就是说:之前程序的控制权限是在我们自己手上,现在,我们把这个控制权交出去了。
那么通过一个实际的情况来说一下
我们在 A 类 中,想去调用 B 类中的方法,是怎么做的?
是不是 要去new B 类对象,通过 对象 去调用 B类中的方法。当前 B 的控制权,是我们手上的。而 控制反转,就是将我们手上的权限,交由 “其他人” 来操作这个类。这个“其他人”,就是 Spring 框架。
此时,我们想要 A 类中调用 B 的时候, 告诉 框架,我要在 A 中 调用 B 了。
至于 B 的生命周期,和我们没有任何关系。
这是控制反转。
前面也说了:spring是一个控制反转容器
也就是 像之前在传统开发的时候,所有需要我们自己去new东西,都不需要我们再去new 了。因为我们把控制权 “反转给了” Spring 框架。Spring 会帮我们管理所有的对象(Bean)。
哪一个例子来举例吧
比如说我们构造一个car类,然后我们肯定是要new一个car对象,在car对象进行初始化的时候是不是要new一个Framework对象?那么继续往下走,每一次的初始化都带着底层的对象的new,那么问题就来了,这对应着什么呢?
如果轮胎的尺寸的固定的,然而随着对的车的需求量越来越大,个性化需求也会越来越多,这时候我们就需要加工多种尺寸的轮胎,那这个时候就要对上面的程序进行修改了。这一修改,就是全部的修改呀!
那么我们怎么解决呢?
我们可以尝试不在每个类中自己创建下级类,如果自己创建下级类就会出现当下级类发生改变操作,自己也要跟