Day 04 - Spring Boot 的前世今生

结束了恼人的环境安装,但我们还没有要开始Spring Boot 的实作,因为在开始学习一项技术之前,我们一定要先了解它的由来、开发目的、理念以及优缺点,这样才可以知道为什麽要使用它以及它与其他工具的差异。

Spring

介绍了Spring Boot 之前先来介绍它的前身Spring,Spring 是一个轻量级的Java 开发框架,主要依存於SSH 框架,即Structs + Spring + Hibernate,定位很明确,Struts 主要负责view 层的显示,Spring 利用IOC 和AOP 来处理业务,Hibernate 则是资料的持久化到资料库。

而Spring 为了开发Java 应用程序提供了全面的基础架构支援。它具有以下几个特点。

  1. 非侵入式
    所谓非侵入式是指Spring 框架的API 不会出现在业务逻辑上,也就是说业务逻辑应该是乾净的,不会出现与业务逻辑无关的程序。针对应用而言,这样才能将业务逻辑从目前应用中剥离出来,进一步在其他的应用中实现重用;针对框架而言,由於业务逻辑中没有Spring 的API,所以业务逻辑也可以从Spring 框架快速移植到其他框架。

  2. 容器
    Spring 提供了容器功能,容器可以管理物件的生命周期以及物件与物件之间的依赖关系,可以写一个设定档定义物件的名称、是否单例以及设定与其他物件的依赖关系,当容器启动後,这些物件就被建立好实体了,可以直接注入使用。

  3. IOC 控制反转
    控制反转是一种程序设计的方式,即依赖关系的转移,如果以前都是依赖於实现,那麽现在反转为依赖於抽象,核心思想就在於面对介面程序设计。

  4. 依赖注入
    物件与物件之间依赖关系的实现,包括介面注入,建构注入等。

  5. AOP 剖面程序设计
    将记录档、安全、交易管理等功能想像成一个剖面,原先这些功能都是直接写在业务逻辑中,但它有两个缺点,首先就是业务逻辑不乾净,其次就是这些功能被很多业务逻辑重复使用,不能做到重用。AOP 就解决了上述问题,可以把这些功能从业务逻辑中拨离出来形成一个剖面,可以实现重用。

Spring Boot

设计目的

Spring Boot 的设计目的是为了解决Spring 各版本设定工作过於繁重的问题,简化初始架设流程、降低开发难度,使开发人员只需要专注在应用程序的开发,而无须过多关注XML 的配置。

设计理念

Spring Boot 的设计理念为约定大於配置(Convention Over Configuration),为此提供了很多已经整合好的依赖套件,以便开发人员在开发应用程序时能做到不用或者很少的Spring 配置就可以让专案快速执行,这样的好处就是开发人员可以把更多的精力放在业务逻辑的开发上。

优点

  1. 使用简单
    Spring Boot 可使用注释的方式实现类别的定义与功能的开发,即可无程序产生和XML 设定。而且Spring Boot 会根据类别路径中的JAR 包,为JAR 包中的类别自动配置Bean,这样可以大量减少我们要使用的配置,当然Spring Boot 只考虑大部分开发状况,若实际开发中我们需要配置Bean 也可以自定义配置。

  2. 配置简单
    Spring Boot 为了简化Maven 配置设定提供了大量的Starter,开发人员只要能配置好相对应组件参数,Spring Boot 就会自动配置,让开发人员能快速搭建依赖於Spring 组件的Java 项目,例如,Spring Boot 为了帮助开发人员快速启动一个web 容器,提供了spring-boot-starter-web 依赖,只需要在pom.xml 档案中新增web 依赖即可。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    而点选进入web 依赖後可以发现,spring-boot-starter-web 已经包含了多个依赖,包括在Spring 中需要汇入的依赖,如下图展示一部分依赖。

    <!-- 忽略其他依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.0.7.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.7.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    
  3. 部署简单
    Spring Boot 内嵌了各种Servlet 容器、Tomcat、Jetty 等,不再需要打包成war 包部署到容器中,我们只需要将专案打包成Jar 包,所有的依赖包都在一个Jar 包内,使用java -jar xxx.jar 即可启动专案。

  4. 监控简单
    Spring Boot 提供了spring-boot-starter-actuator 依赖,它是一套监控、管理应用程序状态的功能模组,包含监控应用程序的执行绪资讯、记忆体资讯等。

缺点

虽然Spring Boot 上手很容易,大部分东西都自动配置,简化了许多架设流程,但也因此需要非常了解Spring Boot 的核心技术原理,需要对配置讯息非常熟悉,不然一旦遇到问题就很棘手,要找问题也不是很容易。

Spring Cloud

Spring Cloud 是基於Spring Boot 的一整套实现微服务的框架,它是一套分散式服务治理架构,本身不提供实际功能性的操作,只专注於服务之间的通讯、熔断和监控等,因此需要很多原件来共同支援一套功能。

三者的关系

从上述介绍可以看出,Spring Boot 其实是依赖於Spring 的,并不是一个全新的架构,Spring Boot 就是Spring 的自动化,而Spring Cloud 透过依赖Spring Boot 来建置微服务应用。

参考网站

Spring Framework - 维基百科,自由的百科全书
Springboot是什麽?Springboot详解!入门介绍


<<:  人脸辨识的流程--特徵撷取

>>:  学习Python纪录Day4 - Python资料型别

DAY15 - 处理/读取档案不可或缺的FileReader

前几天,我们已经认识了跟档案相关的物件,包含:Blob, File, FileList, arryB...

Day17-Kubernetes 那些事 - Auto Scaling

前言 之前的文章介绍了如何利用 ReplicaSet 或 Replication Controlle...

[Day13] 不打鱼晒网

[ 30 Days of ML Challenge | D03] 今天提供一个文件以及一个练习教材,...

[DAY 28] 用google sheet 做简易UI介面(3/3)

题库一个人不容易维护 如果想要多人共用试算表 就会怕有些人动到你设定好的格式 此时可以选择保护工作表...

SQL Server 资料库设定标准化 - 心得分享

DBA Bootcamp 这里所讲的设定是指安装SQL资料库时的设定。如果你只需要管理三到五个资料库...