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-security | Spring 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,你得做这些:
配置数据源(DataSource)
配置 SqlSessionFactory
配置 MapperScannerConfigurer 扫描 Mapper 接口
配置事务管理器
在 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.properties 或 application.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 就自动帮你搞定一切。