Java面试题学习2 - 单例Bean和单例模式

单例模式(设计模式层面)

单例模式是一种设计模式,目的是保证一个类在整个应用中只有一个实例。通常通过私有化构造方法 + 静态方法返回唯一实例来实现。以 Class 为维度,无论在何处获取,返回的都是同一个对象(内存地址相同)。其作用域是 JVM 级别,只要类加载器相同,实例就唯一。

单例 Bean(Spring 容器层面)

Spring 的单例 Bean 是容器管理的概念,以 BeanName 为主键存储在单例池(singletonObjects)中。同一个类如果注册了多个不同名称的 Bean,容器中就会存在多个实例,因此它并不是严格意义上的单例模式。其作用域是 容器级别,不同的 ApplicationContext 容器即使 BeanName 相同,也会各自持有独立的实例。


两者核心区别对比:

单例模式 单例 Bean
唯一性依据 Class(类型) BeanName(名称)
作用域 JVM / ClassLoader Spring 容器
能否多实例 不能 能(不同 BeanName)
实现方式 私有构造 + 静态持有 容器统一管理
默认行为 需手动实现 Spring Bean 默认就是单例

一句话总结:单例模式保证的是"一个类只有一个对象",而 Spring 单例 Bean 保证的是"同一个 BeanName 只有一个对象",两者维度不同,不能混为一谈。