首页 > 编程语言 >【Java后端】Spring vs SpringBoot

【Java后端】Spring vs SpringBoot

时间:2024-10-16 16:19:45浏览次数:7  
标签:xml 依赖 Java Spring 配置 Boot vs spring

在 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 包地狱"。

    <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 映射关系等等。

    <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 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,即可自动引入所有相关依赖,无需再一个个手动添加,避免了版本冲突和依赖管理的烦恼。

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

  3. 嵌入式容器,简化部署:

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

    @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 配置文件。

// 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 三层架构开发模式入门

标签:xml,依赖,Java,Spring,配置,Boot,vs,spring
From: https://blog.csdn.net/weixin_64178283/article/details/142984668

相关文章

  • Python vs Java:爬虫任务中的效率比较
    爬虫技术作为一种自动化的数据采集手段,广泛应用于数据挖掘、信息聚合、内容监控等多个领域。Python和Java是两种流行的编程语言,它们都可以用来开发高效的爬虫程序。本文将探讨Python和Java在爬虫任务中的效率,并展示如何在代码中设置代理信息以提高爬虫的可用性和安全性。......
  • springboot使用自定义注解将对象注入容器中
    在SpringBoot中,你可以通过自定义注解和Spring的`BeanPostProcessor`来将对象注入到Spring容器中。以下是一个简单的实现步骤:1.**创建自定义注解**:importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.Reten......
  • [Java/日志] 日志框架打印应用程序日志代码的执行情况
    0引言我常以为INFO日志级别的应用程序日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,证实了这个思路是错的。1验证实验版本信息jdk:1.8日志组件slf4j.version:1.7.25log4j.version:2.20.0<!--log[start]--><dependency>......
  • 基于数据可视化+SpringBoot+Vue的考研备战交流与分享平台设计和实现(源码+论文+部署讲
     博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs......
  • Java 初学 day11
    Java11常用类练习importjava.util.Scanner;/*字符串反转举例:键盘录入”abc”输出结果:”cba”*/publicclassStringTest1{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println......
  • 使用 Spring 框架构建 MVC 应用程序:初学者教程
    SpringFramework是一个功能强大、功能丰富且设计精良的Java平台框架。它提供了一系列编程和配置模型,旨在简化和精简Java中健壮且可测试的应用程序的开发过程。人们常说Java太复杂了,构建简单的应用程序需要很长时间。尽管如此,Java提供了一个稳定的平台,周围有一个非常成熟......
  • python批处理,一键打开vscode窗口,分别加载jeecg前后端项目,并运行前后端服务.
    importsubprocess#VsCode打开后端项目cmd1=["code","D:\pro\JeecgBoot-v3.7.1\jeecg-boot"]process1=subprocess.Popen(cmd1,stdout=subprocess.PIPE,shell=True)output1,_=process1.communicate()print(output1.decode('utf-8')......
  • javaWeb项目-ssm+jsp股票交易管理系统功能介绍
    本项目源码(点击下方链接下载):java-ssm+jsp股票交易管理系统实现源码(项目源码-说明文档)资源-CSDN文库项目关键技术开发工具:IDEA、Eclipse编程语言:Java数据库:MySQL5.7+框架:ssm、Springboot前端:Vue、ElementUI关键技术:springboot、SSM、vue、MYSQL、MAVEN数据库工......
  • 前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例
    一、引言在当今数字化的时代,前端开发扮演着至关重要的角色,它决定了用户与网页和应用程序交互的体验。HTML、CSS和JavaScript作为前端开发的核心技术,分别负责网页的结构、样式和交互。本教程将为前端新手全面深入地介绍HTML、CSS和JavaScript的知识点,并通过实用案例帮助......
  • Java遍历Map集合的方法
    Java中遍历  Map 集合的常用方式主要有以下几种:1.使用 keySet()方法遍历 遍历Map的key集合,然后通过key获取value。Map<String,Integer>map=newHashMap<>();map.put("one",1);map.put("two",2);map.put("three",3);for(Stringkey......