配置文件优先级
SpringBoot 项目支持三种配置文件:application.properties、application.yml 和 application.yaml。实际使用中,它们之间存在明确的优先级顺序。
从高到低:properties > yml > yaml
虽然三种格式都能用,但团队最好统一选一种——目前 yml 是主流,结构清晰,可读性更好。
Bean 的管理
Bean 的作用域
IOC 容器里的 bean 默认是单例的,也就是整个容器里只有一个实例。如果想改变,可以用 @Scope 注解来配置作用域。
| 作用域 | 说明 |
|---|---|
| singleton | 容器内同名称的 bean 只有一个实例(默认) |
| prototype | 每次使用时都会创建新的实例 |

- 默认 singleton 的 bean 会在容器启动时就被创建,可以用
@Lazy延迟到第一次使用时才初始化。 - prototype 的 bean 每次获取都会生成新对象。
- 实际项目中,绝大多数 bean 都是单例的,很少需要显式设置 scope。
面试题 1:Spring 容器的 bean 是单例还是多例?什么时候实例化? 默认单例,通常在项目启动时实例化;加
@Lazy可以延迟初始化。面试题 2:Spring 容器的 bean 线程安全吗? 取决于 bean 本身的状态和作用域。无状态的单例 bean 是线程安全的;有状态的单例 bean 在多个线程并发操作时可能出现数据不一致,就不是线程安全的。
第三方 Bean
我们自己写的 controller、service、dao 这类类,只要加上 @Component 或其衍生注解(@Controller、@Service、@Repository),Spring 就能扫描到并注册成 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;
@Configuration
public class OSSConfig {
AliyunOSSOperator {
(ossProperties);
}
}



