type
status
date
slug
summary
tags
category
icon
password
参考课程:
【黑马程序员 JavaWeb开发教程】
@ZZHow(ZZHow1024)
配置优先级
- 配置文件优先级顺序:application.properties > application.yml > application.yaml
虽然 SpringBoot 支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置
(.yml 是主流)。
- SpringBoot 除了支持配置文件属性配置,还支持 Java 系统属性和命令行参数的方式进行属性配置。
- Java 系统属性:
-Dserver.port=9000
- IntelliJ IDEA 中的选项:VM options。
- 命令行参数:
--server.port=10010
- IntelliJ IDEA 中的选项:Program arguments。
- 执行 Maven 打包指令 package 后,运行 JAR 包时进行配置:
- 优先级:命令行参数(--xxx=xxx) > Java 系统属性(-Dxxx=xxx) > application.properties > application.yml > application.yaml
Bean管理
- 获取 Bean
- 默认情况下,Spring 项目启动时,会把 Bean 都创建好放在 IOC 容器中,如果想要主动获取这些 Bean,可以通过如下方式:
- 根据 name 获取 Bean:
Object getBean(String name)
。 - 根据类型获取 Bean:
<T> T getBean(Class<T> requiredType)
。 - 根据 name 获取 Bean(带类型转换):
<T> T getBean(String name, Class<T> requiredType)
。
- Bean 作用域
- Spring 支持五种作用域,后三种在 Web 环境才生效:
作用域 | 说明 |
singleton | 容器内同名称的 Bean 只有一个实例(单例)(默认) |
prototype | 每次使用该 Bean 时会创建新的实例(非单例) |
request | 每个请求范围内会创建新的实例(Web 环境中,了解) |
session | 每个会话范围内会创建新的实例(Web 环境中,了解) |
application | 每个应用范围内会创建新的实例(Web 环境中,了解) |
- 通过 @Scope 注解来配置作用域
- 默认 singleton 的 Bean,在容器启动时被创建,可以使用
@Lazy
注解来延迟初始化(延迟到第一次使用时)。 - prototype 的 Bean,每一次使用该 Bean 的时候都会创建一个新的实例。
- 实际开发当中,绝大部分的 Bean 是单例的,绝大部分 Bean 不需要配置 Scope属性。
- 第三方 Bean
@Bean
注解- 如果要管理的 Bean 对象来自于第三方(不是自定义的),是无法用
@Component
及衍生注解声明 Bean 的,就需要用到@Bean
注解。 - 若要管理的第三方 Bean 对象,建议对这些 Bean 进行集中分类配置,可以通过
@Configuration
注解声明一个配置类。 - 通过
@Bean
注解的 name 或 value 属性可以声明 Bean 的名称,如果不指定,默认 Bean 的名称就是方法名。 - 如果第三方 Bean 需要依赖其它 Bean 对象,直接在 Bean 定义方法中设置形参即可,容器会根据类型自动装配。
- 总结:
- 项目中自定义的,使用
@Component
及其衍生注解。 - 项目中引入第三方的,使用
@Bean
注解。
- Spring Boot 原理
- Spring 框架
- Spring Framework(依赖配置繁琐)
- Spring Boot(简化 Spring 的配置)
- Spring Boot 优势
- 起步依赖
- 原理:Maven 的依赖传递。
- 自动配置
- SpringBoot 的自动配置就是当 Spring 容器启动后,一些配置类、Bean 对象就自动存入到了 IOC 容器中,不需要手动声明,从而简化了开发,省去了繁琐的配置操作。
- 自动配置原理
- 方案一:
@ComponentScan
组件扫描 - 实际开发中会引入大量第三方依赖,需要配置的包会非常多,此方案将很繁琐。
- 方案二:
@Import
导入。使用@Import
导入的类会被 Spring 加载到 IOC 容器中,导入形式主要有以下几种: - 导入普通类
- 导入配置类
- 导入 ImportSelector 接口实现类
@EnableXxx
注解,封装@Import
注解(第三方依赖作者自己封装)- 源码跟踪
@SpringBootApplication
注解:该注解标识在 SpringBoot 工程引导类上,是 SpringBoot 中最重要的注解。该注解由三个部分组成:@SpringBootConfiguration
注解:与@Configuration
注解作用相同,用来声明当前也是一个配置类。@ComponentScan
:组件扫描,默认扫描当前引导类所在包及其子包。@EnableAutoConfiguration
: SpringBoot 实现自动化配置的核心注解。@Conditional
注解- 作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的 Bean 对象到 Spring IOC 容器中。
- 位置:方法、类
@Conditional
注解本身是一个父注解,派生出大量的子注解: @ConditionalOnClass
注解:判断环境中是否有对应字节码文件,才注册 Bean 到 IOC 容器。@ConditionalOnMissingBean
注解:判断环境中没有对应的 Bean(类型或名称),才注册 Bean 到 IOC 容器。@ConditionalOnProperty
注解:判断配置文件中有对应属性和值,才注册 Bean 到 IOC 容器。- ……
- 自定义 starter
- 场景:在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在 SpringBoot 的项目中,一般会将这些公共组件封装为 SpringBoot 的 starter。
- 命名规范:
- Spring Boot 官方:spring-boot-starter-功能名
- 如:
- Maven: org.springframework.boot:spring-boot-autoconfigure:3.3.2(自动配置功能)
- Maven: org.springframework.boot:spring-boot-starter-web:3.3.2(依赖管理功能)
- 第三方提供:功能名-spring-boot-starter
- 如:
- Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:3.0.3
- Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3
- Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.7
- Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.7
- 步骤:
- 创建 xxx-spring-boot-starter 模块(依赖管理功能)。
- 创建 xxx-spring-boot-autoconfigure 模块(自动配置功能),在 starter 中引入该模块。
- 在 aliyun-oss-spring-boot-autoconfigure 模块中的定义自动配置功能,并定义自动配置文件 META-INF/spring/xxx.imports。