0. 关于本文
本文主要用于记录总结我学习Spring Boot过程遇到的重要知识,我学习的课程是B站黑马程序员的SpringBoot课程。希望此博客可以帮助到大家,也能方便我快速回看相关知识。
1. 概述
1.1 Spring简介
Spring是一个开源的Java平台,它提供了全面的基础设施支持来帮助Java开发者更容易地开发企业级应用程序。
1.2 Spring Boot简介
- Spring Boot是Spring的一个子项目,是一个开源的Java基础框架,用于快速创建独立、生产级别的基于Spring框架的应用程序。
- Spring Boot让开发者能够轻松创建Spring应用程序,而无需处理Spring框架配置的复杂性。
1.3 传统的开发方式
1.3.1 简述
使用多个子项目处理不同的场景业务,这些子项目以Spring Framework为核心。
1.3.2 缺点
- 导入依赖繁琐。手动引入多个依赖,这些依赖的jar包之间还可能存在冲突
- 项目配置繁琐。写很多个配置文件,以applicationContext.xml文件为核心,在里面声明多个bean对象(先声明再使用)
1.4 Spring Boot的优点
- 起步依赖。本质上是一个Maven坐标,整合了完成一个功能需要的所有坐标,借助Maven传递依赖的特性。
- 自动配置。在boot程序启动后,一些bean对象会自动注入到ioc容器,不需要手动声明,简化开发。
- 其它特性
- 内嵌Tomcat、Jetty(无需部署WAR文件)。启动Spring应用之后自动启动内部的Tomcat把Tomcat的内容部署好,部署项目的时候不再需要war包。
- 外部化配置。修改配置的时候只需要修改外部的配置文件而不再需要重新打包jar包
- 不需要XML配置(使用properties/yml文件进行配置)
2. 创建一个简单的Spring Boot应用程序
2.1 在IDEA创建项目
2.2 pom配置文件内容
- 起步依赖
- 父工程
2.3 启动类
- @SpringBootApplication:这是一个Spring Boot框架的注解,用于标记主类作为Spring Boot应用程序的入口。
2.4 创建Controller
- 创建一个controller软件包用于管理各种controller
- 新建一个HelloController类
- @RestController:这是一个Spring框架的注解,用于标记类作为REST风格的控制器。它告诉Spring框架,这个类中的方法会返回数据,而不是视图(如HTML页面)。
- @RequestMapping:这是另一个Spring框架的注解,用于将HTTP请求映射到特定的处理方法上。在这个例子中,它告诉Spring框架,任何对/hello路径的HTTP请求都应该由hello方法来处理。
3. 从Maven工程创建Spring Boot工程
- 创建一个基本的Maven工程
- 在pom.xml文件中添加父工程和启动依赖
- 在App.java中提供启动类
- 在main文件夹下创建resources文件夹管理资源文件,并创建一个properties配置文件
4. 配置文件基本使用
4.1 properties配置文件
- 用“.”进行层级的分隔
4.2 yml配置文件(实际开发中使用)
- 用换行和缩进进行层级的分隔
- 层次更加清晰,更加关注数据
4.3 yml配置信息的书写和获取
4.3.1 第三方技术配置信息(只需要书写,不需要获取)
引入依赖之后根据需要的配置进行书写即可
4.3.2 自定义配置信息(某个变量的值写在配置文件里)
- 配置书写
-
普通配置变量
注意用空格分开键名和值,用换行和空格区分层级 -
数组
用短横线和定义一个个的元素,用空格分开短横线
-
- 配置获取
-
@value(“${…}”)
这样需要一个一个的指定 -
@ConfigurationProperties(prefix = “…”)
这样可以把一个层级下的所有配置信息指定到一个类的属性中,Spring Boot自动从相同的配置名获取值给变量
-
5. Bean对象管理
5.1 Bean对象扫描
- Spring传统的方法
- 在xml配置文件中添加标签指定扫描的包路径:<context:component-scan base-package=“com.xxx”>
- 使用注解指定扫描的包路径:@ComponentScan(basePackages=“com.xxx”)
- Spring Boot的方法
- 默认扫描启动类所在包及其子包(可通过传统方法扫描其他包)
5.2 注册第三方技术的Bean对象
-
使用@Bean注解。声明一个方法创建一个要注册的对象,对该方法使用@Bean注解
- 上述方法可以放在启动类里面(但是不推荐),也可以放在一个专门的配置类里面(推荐)
- 对象注册的名字默认是对应的方法名(如上图的student),可以通过注册的名字获取该对象,也可以在@Bean注解中指定名字,如@Bean(“teacher”)
- 上述方法可以放在启动类里面(但是不推荐),也可以放在一个专门的配置类里面(推荐)
-
使用@Import注解。在启动类添加一个@Import(xxx.class)注解,xxx可以是任意类(普通类、配置类),实际开发多导入配置类和ImportSelector类
- 导入配置类
- 导入ImportSelector(主要用于导入多个Bean类时使用)
- 导入配置类
5.3 注册条件
-
@ConditionalOnProperty。配置文件中存在对应的属性,才声明该bean。
前缀stu中有name和age等配置属性才注册,否则不注册。 -
@ConditionalOnMissingBean。当不存在当前类型的bean时,才声明该bean。
Student类没有被注册时才进行注册。 -
@ConditionalOnClass。当前环境存在指定的这个类时,才声明该bean。
5.4 自动配置原理
- 启动类添加SpringBootApplication注解
- SpringBootApplication组合了EnableAutoConfiguration注解
- EnableAutoConfiguration组合了Import注解
- Import导入了AutoConfigurationImportSelector类
- AutoConfigurationImportSelector类通过层层调用读取.imports配置文件
- 读取到全类名之后解析注册条件,把满足条件的Bean对象自动注入到IOC容器
- 创建能够自动配置的jar包