【Java后端】Spring vs SpringBoot

在 Java 开发领域,Spring 框架凭借其强大的功能和丰富的生态系统,一直是构建企业级应用的利器。然而,传统的 Spring 项目配置繁琐,启动缓慢,常常让开发者陷入 XML 配置和依赖管理的泥潭,极大地影响了开发效率。

Spring Boot 应运而生,它秉承**"约定大于配置"** 的理念,通过自动配置起步依赖嵌入式容器等创新性设计,极大地简化了 Spring 应用的搭建和开发过程,让开发者能够专注于业务逻辑的实现,而无需操心繁琐的配置。艾伦将带你深入剖析 Spring Boot 如何实现简单配置、快速启动以及高效开发,并以具体示例对比传统 Spring 项目,带你领略 Spring Boot 的魅力。

一、传统 Spring 项目配置之痛:XML 地狱与启动噩梦

假设我们要开发一个简单的 Web 应用,使用传统的 Spring 框架,我们需要经历以下痛苦的过程:

  1. 引入依赖,版本地狱:

    首先,我们需要在项目的 pom.xml 文件中添加 Spring MVC、Servlet API、JSON 处理库等一大堆依赖,而且还得自己一个个确认版本兼容性,稍有不慎就会陷入 "jar 包地狱"。

    XML 复制代码
    <dependencies>
        <!-- Spring MVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.10</version>
        </dependency>
    
        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    
        <!-- JSON 处理库 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.4</version>
        </dependency>
    
        <!-- ... 可能还有更多 -->
    </dependencies>
  2. 配置 web.xml,繁琐易错:

    接着,我们需要配置 web.xml 文件,注册 Spring MVC 的核心控制器 DispatcherServlet,指定 Spring 配置文件的位置,设置 URL 映射关系等等。

    XML 复制代码
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  3. 编写 Spring 配置文件,XML 地狱:

    接下来,我们还需要编写 applicationContext.xml 等 Spring 配置文件,配置各种 Bean,例如视图解析器、数据源、事务管理器、AOP 切面等等。

    XML 复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc 
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <context:component-scan base-package="com.example.controller" />
        <mvc:annotation-driven />
    
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <!-- ... 可能还有更多 -->
    
    </beans>

    这些 XML 配置文件充斥着大量的标签、属性和命名空间,代码量大,容易出错,而且非常不直观,修改起来也相当麻烦。随着项目规模的扩大,配置文件会越来越庞大,维护成本也会越来越高,最终沦为难以维护的 "XML 地狱"。

  4. 启动速度慢,效率低下:

    传统的 Spring 项目启动时,需要加载并解析大量的 XML 配置文件,实例化各种 Bean,建立依赖关系,这个过程非常耗时,尤其是在大型项目中,启动时间可能会长达数分钟甚至更久,极大地影响了开发效率。

二、Spring Boot 如何化繁为简,实现极速启动?

为了解决传统 Spring 项目的配置繁琐、启动缓慢等问题,Spring Boot 采用了一系列革新性的设计理念和技术手段:

  1. 自动配置,解放双手:

    Spring Boot 根据项目引入的依赖,自动进行配置。例如,当你引入了 spring-boot-starter-web 依赖, Spring Boot 就会自动配置 Spring MVC 所需的各种组件,包括 DispatcherServlet、视图解析器、JSON 转换器等等,无需你再手动配置。

    Spring Boot 的自动配置机制基于 "Spring 条件化配置" 实现,它会根据 classpath 中存在的类、接口、注解以及配置文件中的属性,有条件地创建 Bean 并进行配置。这种智能化的配置方式,极大地简化了开发者的工作量,让他们能够专注于业务逻辑的实现。

  2. 起步依赖,一键引入:

    Spring Boot 将常用的依赖打包成一个个 "starter",例如 spring-boot-starter-web 就包含了 Spring MVC 开发所需的全部依赖,包括 Spring MVC 框架本身、Servlet API、JSON 处理库等等。你只需在项目的 pom.xml 文件中引入一个 starter,即可自动引入所有相关依赖,无需再一个个手动添加,避免了版本冲突和依赖管理的烦恼。

    XML 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  3. 嵌入式容器,简化部署:

    Spring Boot 内嵌了 Tomcat、Jetty、Undertow 等常用的 Web 容器,你可以直接将应用打包成 jar 文件运行,无需再单独部署到外部容器。这种 "自带容器" 的方式,简化了应用的部署过程,也方便了应用的迁移和扩展。

    java 复制代码
    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }

    你只需要创建一个简单的 Java 类,添加 @SpringBootApplication 注解,就可以启动一个完整的 Web 应用,是不是非常简单?

  4. 条件化配置,灵活应对:

    Spring Boot 会根据应用的运行环境、配置参数等条件,动态地加载不同的配置,例如,你可以根据不同的环境,配置不同的数据库连接信息,而无需修改代码。这种灵活的配置方式,使得应用能够轻松应对不同的运行环境和配置需求。

    这些设计理念和技术手段,使得 Spring Boot 应用的配置变得异常简单,你只需关注业务逻辑的实现,而无需操心繁琐的配置。同时,Spring Boot 的自动配置和嵌入式容器,也大大加快了应用的启动速度,通常只需几秒钟即可启动完成。

通过SpringBoot所提供的起步依赖,就可以大大的简化pom文件当中依赖的配置,从而解决了Spring框架当中依赖配置繁琐的问题。

通过自动配置的功能就可以大大的简化框架在使用时bean的声明以及bean的配置。我们只需要引入程序开发时所需要的起步依赖,项目开发时所用到常见的配置都已经有了,我们直接使用就可以了。

三、Spring Boot 高效开发的秘诀:Actuator、DevTools 与强大的生态

除了简单配置和快速启动之外,Spring Boot 还提供了许多其他特性,帮助你更高效地开发应用:

  • Actuator:洞察应用运行状态:

Spring Boot Actuator 提供对应用程序内部状态的监控和管理功能,例如查看运行状况、指标收集、HTTP 跟踪、线程信息、内存信息、JVM 信息等等。你可以通过 HTTP 端点、JMX 或 SSH 访问 Actuator 提供的各种监控和管理功能,实时了解应用的运行状况,及时发现并解决问题。

  • DevTools:提升开发效率:

Spring Boot DevTools 提供一系列开发工具,例如自动重启、实时加载、远程调试等,提升开发效率。自动重启功能可以在你修改代码后自动重启应用,无需手动重启;实时加载功能可以将代码变更实时反映到运行的应用中,无需重新加载页面;远程调试功能可以让你在本地调试远程服务器上的应用。

  • 强大的生态系统:轻松集成:

Spring Boot 与 Spring Cloud、Spring Security、Spring Data、Spring Session 等 Spring 生态系统完美集成,可以轻松构建微服务、安全应用、数据访问层、分布式 Session 等等。这些丰富的生态系统,为 Spring Boot 应用提供了强大的扩展能力和灵活的定制能力。

四、示例:传统 Spring 与 Spring Boot 项目对比

为了更直观地感受 Spring Boot 的优势,我们来对比一下传统 Spring 项目和 Spring Boot 项目在实现相同功能时的代码差异:

功能: 创建一个简单的 RESTful API,返回 "Hello, World!" 字符串。

传统 Spring 项目(繁琐、易错):

  1. pom.xml: 引入 Spring MVC、Servlet API、JSON 处理库等依赖。

  2. web.xml: 配置 DispatcherServlet、Spring 配置文件位置、URL 映射关系等。

  3. applicationContext.xml: 配置组件扫描、注解驱动、视图解析器等 Bean。

  4. Controller: 编写处理请求的控制器类。

Spring Boot 项目(简单、高效):

  1. pom.xml: 只需引入 spring-boot-starter-web 一个依赖。

  2. Controller: 编写处理请求的控制器类,无需任何 XML 配置文件。

java 复制代码
// Spring Boot Controller
@RestController
public class HelloWorldController {

    @RequestMapping("/")
    public String helloWorld() {
        return "春天启动!";
    }
}

可以看到,使用 Spring Boot 开发,你只需引入一个 starter 依赖,编写一个简单的 Controller 类即可,无需任何 XML 配置,代码量大大减少,开发效率显著提升。

五、结语

Spring Boot 的出现,标志着 Spring 应用开发进入了一个全新的时代。它以简单、快速、高效的特点,征服了无数开发者的心,成为构建现代应用程序的首选框架。如果你还没有体验过 Spring Boot 的魅力,不妨现在就动手尝试一下。

以上就是关于spring 对比 spring boot 的详解,感谢各位看官的观看,下期见,谢谢~

相关教程:

快速创建第一个 spring boot 项目

spring boot 整合 mybatis快速入门

spring boot 三层架构开发模式入门

相关推荐
芒果披萨10 分钟前
El表达式和JSTL
java·el
阿伟来咯~21 分钟前
记录学习react的一些内容
javascript·学习·react.js
许野平35 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
Suckerbin42 分钟前
Hms?: 1渗透测试
学习·安全·网络安全
duration~1 小时前
Maven随笔
java·maven
水豚AI课代表1 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
聪明的墨菲特i1 小时前
Python爬虫学习
爬虫·python·学习
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos