1 配置优先级
SpringBoot 项目当中支持的三类配置文件:
- application.properties
- application.yml
- application.yaml
配置文件优先级排名(从高到低): properties 配置文件 > yml 配置文件 > yaml 配置文件
虽然 SpringBoot 支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置。(yml 是主流)
2 Bean 的管理
2.1 Bean 的作用域
IOC 容器当中,默认 bean 对象是单例的 (只有一个实例对象),可以借助 Spring 中的@Scope 注解来进行配置作用域。
| 作用域 | 说明 |
|---|---|
| singleton | 容器内同名称的 bean 只有一个实例(单例)(默认) |
| prototype | 每次使用该 bean 时会创建新的实例(非单例) |
- 默认 singleton 的 bean,在容器启动时被创建,可以使用@Lazy 注解来延迟初始化(延迟到第一次使用时)
- prototype 的 bean,每一次使用该 bean 的时候都会创建一个新的实例。
- 实际开发当中,绝大部分的 bean 是单例的,也就是说绝大部分 bean 不需要配置 scope 属性。
面试题 1:Spring 容器的 bean 是单例的还是多例的?单例的 bean 是什么时候实例化的? 默认是单例的。单例的 bean,默认是项目启动时实例化的(通过 @Lazy 可以延迟初始化)
面试题 2:Spring 容器的 bean 是线程安全的吗? bean 的线程安全取决于 bean 的状态及 bean 的作用域。
- 单例 bean:如果是无状态的 bean,内部不保存任何状态信息,则是线程安全的。
- 单例 bean:如果是有状态的 bean,内部会保存状态信息,多个线程会同时操作该 bean 时,可能会出现数据不一致的问题,这样的 bean 则是线程不安全的。
2.2 第三方 Bean
之前我们所配置的 bean,像 controller、service,dao 三层体系下编写的类,这些类都是我们在项目当中自己定义的类 (自定义类)。当我们要声明这些 bean,也非常简单,我们只需要在类上加上 @Component 以及它的这三个衍生注解(@Controller、@Service、@Repository),就可以来声明这个 bean 对象了。
但是在我们项目开发当中,还有一种情况就是这个类它不是我们自己编写的,而是我们引入的第三方依赖当中提供的,那么此时我们是无法使用 @Component 及其衍生注解来声明 bean 的,此时就需要使用**@Bean**注解来声明 bean 了。
若要管理的第三方 bean 对象,建议对这些 bean 进行集中分类配置,可以通过 @Configuration 注解声明一个配置类。【推荐】
package com.example.config;
import com.example.utils.AliyunOSSOperator;
import com.example.utils.AliyunOSSProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
{
AliyunOSSOperator {
(ossProperties);
}
}

