单例bean面试题
时间: 2025-05-14 19:23:29 浏览: 25
单例 Bean 是 Spring 框架中非常重要的一部分,通常也是面试中的高频考点。以下是关于单例 Bean 面试题的一个简要介绍及解答思路:
### 什么是单例 Bean?
在 Spring 容器中,默认情况下所有的 Bean 都是以 **单例模式 (Singleton Pattern)** 创建的。这意味着在整个应用上下文中,对于某个 Bean 只会存在唯一的一个实例。无论我们通过 `@Autowired` 注入多少次这个 Bean,实际上获得的都是同一个对象引用。
#### 示例代码:
```java
@Component
public class SingletonBean {
public String getName() {
return "我是单例 Bean";
}
}
```
---
### 常见单例 Bean 面试问题
1. **Spring 中有多少种作用域(Scope),默认的作用域是什么?**
- 答案:Spring 提供了多种 Scope,包括但不限于 `singleton`, `prototype`, `request`, `session` 和 `application`。
默认的作用域是 `singleton`,表示容器内只有一个实例被创建并共享给所有使用者。
2. **如何验证一个 Bean 是否为单例?**
- 我们可以通过多次注入该 Bean 并比较其哈希值 (`hashCode`) 来判断是否每次得到的都是相同的实例。
```java
@Autowired
private SingletonBean bean1;
@Autowired
private SingletonBean bean2;
// 测试两个 bean 实际上是不是同一对象
System.out.println(bean1 == bean2); // 输出 true 表明它们确实相等
```
3. **如果单例 Bean 内部维护了一个可变的状态会发生什么情况?**
- 这是一个潜在的问题点!由于多个线程可能会同时访问同一个单例 Bean 的内部成员变量,如果没有妥善处理并发控制(例如加锁或使用线程安全的数据结构),那么就会导致数据竞争条件下的错误结果或者是不确定的行为发生。
4. **能否将 prototype 类型的依赖注入到 singleton Bean 中去呢? 如果可以的话需要注意些什么吗?**
- 当然能这么做! 不过需要注意的是,Spring只会在初始化阶段装配一次原型类型的组件进到那个单一实例里头; 后续即便原形bean已被销毁也不会再动态刷新替换进去新的版本.
---
###
阅读全文
相关推荐

















