当前位置: 首页 > news >正文

SpringBoot01-springBoot的特点

一、简介

springboot是spring提供的一个子项目,用于快速构建spring应用程序。

传统方式:

子项目都依赖于spring framework这个核心功能进行组合构建,比较麻烦。

1-1、传统spring的痛点 

依赖难管理

  • 引入依赖时,你得自己查清楚需要哪些 jar。

  • 比如整合 Spring + MyBatis + Jackson,可能要引十几个 jar 包。

  • 各 jar 包之间还有版本兼容问题。

配置太繁琐

  • Bean 要写 <bean> 标签,配置太多 XML。

  • Controller、Service、Dao 都要在配置文件中手动注册。

  • 数据源、事务、AOP、MVC 配置全靠 XML 或 JavaConfig。

开发初期,写一堆配置文件才能跑一个小项目,非常低效!

启动麻烦

  • 启动一个项目要配置 web.xml,配置 DispatcherServlet。

  • 如果你用 Spring + Tomcat,还要单独部署 war 包。

无法快速创建项目

  • 没有脚手架,没有自动化工具,每次都得从头配置。

1-2、springboot的特点

1-2-1、起步依赖

Spring Boot 的起步依赖(Starter Dependencies)——这是 Spring Boot 最具代表性的“爽点”之一。


1、什么是起步依赖(Starter Dependency)?

起步依赖(Starter)是 Spring Boot 提供的一组预定义的依赖集合,用来简化项目的依赖管理。

你只需要引入一个 starter,就相当于引入了一大堆相关的 jar,并且这些 jar 版本已经由 Spring Boot 帮你协调好了。


2、起步依赖的命名规则

Starter 的名字通常都是:

spring-boot-starter-xxx
起步依赖功能
spring-boot-starter核心起步依赖(包含日志、自动配置等)
spring-boot-starter-web构建 Web 项目,包含 Spring MVC + Jackson + Tomcat
spring-boot-starter-data-jpa操作数据库(JPA/Hibernate)
spring-boot-starter-jdbc操作数据库(原生 JDBC)
spring-boot-starter-securitySpring Security 安全框架
spring-boot-starter-test测试框架:JUnit、Mockito、AssertJ 等
spring-boot-starter-thymeleaf模板引擎 Thymeleaf
spring-boot-starter-actuator提供运行时监控和指标(健康检查等)
spring-boot-starter-validation表单和参数校验

3、示例:web 项目只需要 1 行依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

你就拥有了:

  • Spring MVC

  • Jackson JSON 解析

  • 内嵌 Tomcat

  • 其他常用工具类

  • 自动配置能力


4、起步依赖的优点
优点说明
简化依赖一个 starter 就包含多个常用依赖
避免冲突Spring Boot 使用 BOM(版本管理)统一控制依赖版本
自动配置配合 Spring Boot 的自动装配机制,几乎零配置上手
快速上手适合新手,也适合快速构建企业级应用

5、自定义 Starter(可选扩展)

在企业中,可以自定义 xxx-starter,为多个项目统一封装依赖和配置,减少重复开发工作。

1-2-2、自动配置

我们以 Spring Boot + MyBatis 为例,来讲解 Spring Boot 的核心特性之一:自动配置(Auto Configuration)


1、什么是 Spring Boot 的自动配置?

Spring Boot 会根据你引入的依赖和配置文件中的内容,自动帮你配置相关的 Bean、组件、环境,而你不需要自己去写复杂的配置类或 XML

程序启动后,一些bean对象会自动注入到ioc容器中,不需要手动声明,简化开发。


2、Sprin + MyBatis 的传统配置(Spring时代)

在 Spring 中整合 MyBatis,你得做这些:

  1. 配置数据源(DataSource)

  2. 配置 SqlSessionFactory

  3. 配置 MapperScannerConfigurer 扫描 Mapper 接口

  4. 配置事务管理器

  5. 在 XML 里注册上述 Bean

繁琐又容易出错。


3、Spring Boot 如何自动帮你配置这些?

步骤一:加依赖

<!-- MyBatis 和 Spring Boot 整合起步依赖 -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version> <!-- 版本可查官网 -->
</dependency>

步骤二:写配置(application.yml 或 application.properties)

spring:datasource:url: jdbc:mysql://localhost:3306/testusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.demo.pojo

步骤三:写 Mapper 接口

@Mapper
public interface CarMapper {Car selectById(Long id);
}

步骤四:写 Service 调用就行了


4、Spring Boot 背后自动做了什么?

当你引入 mybatis-spring-boot-starter 后,Spring Boot 自动执行以下逻辑:

自动配置类:MybatisAutoConfiguration

Spring Boot 启动时,会扫描 spring.factories 里的配置项,其中包括:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

这个类会自动:

功能Spring Boot 自动做了什么
数据源根据 spring.datasource.* 配置自动创建 DataSource Bean
SqlSessionFactory自动创建 SqlSessionFactory
Mapper 接口自动扫描 @Mapper 接口并注入到容器中
配置文件自动加载 mybatis.mapper-locations 指定的 XML
别名包自动读取 type-aliases-package 并注册别名

你完全不用自己写这些配置类,Spring Boot 全部代劳!


5、要使用自动配置,还需要两点小细节
1. 扫描 Mapper(有两种方式)
// 方式一:每个 Mapper 接口加 @Mapper
@Mapper
public interface CarMapper {}// 方式二:全局扫描 Mapper 包(推荐)
@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {...
}

2. Mapper XML 放在正确的位置

Spring Boot 默认扫描:

classpath:mapper/*.xml

你要么:

  • 把 XML 放到 src/main/resources/mapper 目录

  • 要么在配置文件中手动指定路径

1-2-3、springboot的其它特性

1. 内嵌的 Tomcat / Jetty(无需部署 WAR 文件)

(1)、传统 Spring(非 Boot)做法

你得把整个项目打成 .war 包,然后:

  • 安装 Tomcat

  • .war 放进 webapps 目录

  • 重启 Tomcat

  • 看控制台看日志输出…

很麻烦!


(2)、Spring Boot 做法

你只需要在项目中写一个 main() 方法:

@SpringBootApplication
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args); // 启动内嵌Tomcat}
}

Spring Boot 内置了 Tomcat、Jetty 或 Undertow(默认是 Tomcat),打成的是 .jar 文件,运行只需一条命令:

java -jar myapp.jar

优势:

  • 无需安装 Tomcat

  • 可独立运行,部署更简单

  • 容器化更方便(Docker + 微服务)


2. 外部化配置(Externalized Configuration)

你可以通过配置文件、命令行参数、环境变量等方式动态调整应用行为,而不改动 Java 代码

举例:配置数据库连接

# application.ymlspring:datasource:url: jdbc:mysql://localhost:3306/demousername: rootpassword: 123456

你可以通过这些方式修改:

方式示例
配置文件application.propertiesapplication.yml
命令行参数--server.port=8081
环境变量SPRING_DATASOURCE_PASSWORD=abcdefg
profile 文件application-dev.yml, application-prod.yml

实际好处:

  • 不同环境(开发 / 测试 / 生产)切换配置无痛

  • 密码和端口可以通过命令行、环境变量注入,更安全

  • 避免写死配置在代码里


3. 不需要 XML 配置(使用注解 + yml/properties)

传统 Spring:到处都是 XML

<bean id="carService" class="com.example.CarService"/>
<context:component-scan base-package="com.example"/>

看起来繁琐、容易错、读起来也吃力。


🚀 Spring Boot:用注解替代 XML

@Service
public class CarService {...
}

再加个主类:

@SpringBootApplication // 相当于 @ComponentScan + @Configuration + @EnableAutoConfiguration
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}

你不再需要写任何 Spring 配置 XML,几乎所有组件靠注解自动装配。


1-3、创建一个hello springboot项目

点击apply,ok,spring new module将创建完成:

项目创建完成,打开pom.xml文件:

可以看到web起步依赖已添加,但是没有version这是因为:

所有的boot项目,都直接、间接的继承于父工程,主要用于起步依赖的版本。

你只要写下面这段代码,就能跑一个 Web 服务:

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}

不需要:

  • web.xml

  • DispatcherServlet 配置

  • Controller 扫描配置

只要加上 spring-boot-starter-web,Spring Boot 就自动帮你搞定一切。

http://www.dtcms.com/a/284956.html

相关文章:

  • 登录功能实现深度解析:从会话管理到安全校验全流程指南
  • 【算法训练营Day13】二叉树part3
  • 【中等】题解力扣21:合并两个有序链表
  • 教你使用bge-m3生成稀疏向量和稠密向量
  • 大语言模型系列(1): 3分钟上手,在骁龙AI PC上部署DeepSeek!
  • 【Lua】题目小练2
  • LIN协议核心详解
  • c++之 KMP 讲解
  • Cocos游戏中UI跟随模型移动,例如人物头上的血条、昵称条等
  • C++中,不能声明为虚函数的函数类型
  • C++进阶-AVL树(平衡二叉查找树)(难度较高)
  • 2025 XYD Summer Camp 7.17 模考
  • Vue.js 响应式原理深度解析:从 Vue 2 的“缺陷”到 Vue 3 的“涅槃重生”
  • OpenVela之网络驱动适配指南
  • JxBrowser 7.43.5 版本发布啦!
  • ​​Sublime Text 2.0.2.2221 安装教程 - 详细步骤指南(附下载与配置)​
  • 深入解析:Chunked Prefill 与 FlashAttention/FlashInfer 如何协同工作
  • WSL2 离线安装流程
  • 如何让订货系统支持多角色?
  • 药品通用名、商品名、规格剂型查询API接口-中国药品批文数据库
  • 深度学习之优化方法
  • 页面登录阻止浏览器提醒是否保存密码
  • 算法讲解-移动零
  • 面试Redis篇-深入理解Redis缓存击穿
  • HTML 常用语义标签与常见搭配详解
  • 【Dv3Admin】菜单管理集成阿里巴巴自定义矢量图标库
  • uniapp云托管前端网页
  • 数据库、HTML
  • 中国各省市县坡度数据(Tif/Excel)
  • appium