都5202年了你还不知道Spring和SpringBoot区别吗

191 阅读6分钟

1. 框架概述

Spring

Spring 是一个轻量级的 Java 开发框架,由 Rod Johnson 在 2003 年创建。它提供了一系列的功能和模块,用于解决企业级应用开发中的各种问题,如依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问等。Spring 的核心是 IoC(Inversion of Control,控制反转)容器,通过 IoC 容器可以实现对象的创建、管理和依赖注入,从而降低代码的耦合度。

Spring Boot

Spring Boot 是 Spring 项目组在 Spring 基础上推出的一个全新框架,旨在简化 Spring 应用的开发过程。它通过提供默认配置、自动配置和嵌入式服务器等特性,让开发者可以快速搭建和运行 Spring 应用,减少了繁琐的配置工作,提高了开发效率。

2. 配置方式

Spring

Spring 框架的配置通常需要编写大量的 XML 配置文件或使用 Java 注解。例如,使用 XML 配置文件来定义 Bean:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.example.service.UserService"/>
</beans>

或者使用 Java 注解:

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService();
    }
}

随着项目规模的增大,配置文件会变得越来越复杂,维护成本也会相应增加。

Spring Boot

Spring Boot 采用了约定优于配置(Convention Over Configuration)的原则,提供了自动配置功能。开发者只需要在 application.propertiesapplication.yml 文件中进行少量的配置,Spring Boot 就会根据类路径下的依赖自动配置应用。例如,配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

如果需要自定义配置,也可以通过注解来实现,如 @Configuration@Bean

使用mybatis为例

Spring

  1. 添加依赖 在使用 Maven 管理项目时,需要在 pom.xml 文件中手动添加 Spring 和 MyBatis 相关的依赖,同时还需要添加数据库驱动依赖。示例如下:
<dependencies>
    <!-- Spring 核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.25</version>
    </dependency>
    <!-- MyBatis 依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <!-- MyBatis-Spring 集成依赖 -->
    <dependency>
        <groupId>org.mybatis.spring</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.7</version>
    </dependency>
    <!-- 数据库驱动依赖(以 MySQL 为例) -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.32</version>
    </dependency>
</dependencies>
  1. 配置数据源和 SqlSessionFactory 通常需要编写 Java 配置类或者 XML 配置文件来配置数据源和 SqlSessionFactory。以下是 Java 配置类的示例:
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }
}

SpringBoot

  1. 添加依赖 同样使用 Maven 管理项目,在 pom.xml 文件中添加 Spring Boot 和 MyBatis 相关的 Starter 依赖。Spring Boot 的 Starter 依赖会自动管理相关的依赖版本,减少了版本冲突的问题。示例如下: 注意!:这里引用的是【mybatis-spring-boot-starter】
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MyBatis Spring Boot Starter -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.1</version>
    </dependency>
    <!-- 数据库驱动依赖(以 MySQL 为例) -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>
  1. 配置数据源 只需要在 application.properties 或 application.yml 文件中进行简单的数据源配置。以 application.properties 为例:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3. 项目搭建

Spring

在使用 Spring 搭建项目时,需要手动添加各种依赖,如 Spring Core、Spring Context、Spring AOP 等。可以通过 Maven 或 Gradle 来管理依赖,但需要在 pom.xmlbuild.gradle 文件中手动配置每个依赖的版本。例如,使用 Maven 添加 Spring Core 依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.23</version>
</dependency>

同时,还需要配置 Web 服务器(如 Tomcat、Jetty 等),将项目部署到服务器上才能运行。

Spring Boot

Spring Boot 提供了 Spring Initializr(start.spring.io/) 来快速生成项目骨架。开发者只需要选择项目的基本信息(如项目类型、语言、Spring Boot 版本等)和所需的依赖,Spring Initializr 就会自动生成一个可以直接运行的项目。例如,选择 Spring Web 依赖,生成的 pom.xml 文件会自动添加相关依赖:

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

Spring Boot 还内置了嵌入式服务器(如 Tomcat、Jetty 等),可以直接通过 java -jar 命令运行项目,无需额外配置和部署。

4. 开发效率

Spring

由于 Spring 需要手动配置大量的信息,开发过程中需要花费较多的时间在配置文件的编写和调试上。特别是在处理复杂的业务逻辑和多模块项目时,配置的复杂度会进一步增加,导致开发效率低下。

Spring Boot

Spring Boot 的自动配置和快速搭建项目的特性大大提高了开发效率。开发者可以将更多的精力放在业务逻辑的实现上,而不是繁琐的配置工作。同时,Spring Boot 提供了丰富的 Starter 依赖,只需要添加相应的依赖,就可以快速集成各种功能,如数据库访问、消息队列等。

5. 部署方式

Spring

Spring 应用通常需要打包成 WAR(Web Application Archive)文件,然后部署到外部的 Web 服务器(如 Tomcat、WebLogic 等)上。部署过程相对复杂,需要配置服务器的环境和参数,并且需要手动将 WAR 文件部署到服务器上。

Spring Boot

Spring Boot 应用可以打包成可执行的 JAR 文件,通过 java -jar 命令直接运行。这种部署方式非常简单,只需要在目标服务器上安装 Java 环境,就可以运行 Spring Boot 应用。同时,Spring Boot 还支持 Docker 容器化部署,方便进行云原生开发和部署。

6. 适用场景

Spring

Spring 适用于对配置有高度定制化需求的项目,或者需要与旧有系统集成的项目。由于 Spring 提供了丰富的配置选项和扩展点,开发者可以根据具体需求进行灵活配置和定制。例如,在一些传统的企业级应用开发中,可能需要使用 XML 配置来满足特定的业务需求。

Spring Boot

Spring Boot 适用于快速开发和迭代的项目,特别是微服务架构的项目。它的自动配置和快速搭建项目的特性可以帮助开发者快速构建和部署微服务,提高开发效率和项目的可维护性。例如,在开发一个小型的 Web 应用或 API 服务时,使用 Spring Boot 可以快速实现功能。

结论

Spring 和 Spring Boot 都是优秀的 Java 开发框架,它们在配置方式、项目搭建、开发效率、部署方式和适用场景等方面存在明显的区别。Spring 提供了强大的功能和灵活的配置选项,适合对配置有高度定制化需求的项目;而 Spring Boot 则通过简化配置和快速搭建项目,提高了开发效率,适合快速开发和迭代的项目。开发者可以根据项目的具体需求选择合适的框架。