You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否创建Spring单例的多个实例?多Bean配置为何未报错?

为什么定义多个同一类的Spring Bean不会报错?

其实这完全是正常现象,Spring从来没限制过同一个类可以定义多少个Bean——它的单例特性是针对每个Bean ID/名称的,而不是针对类本身的。

你配置里的三个Bean:

  • springsingleton1:默认单例,Spring会为这个ID创建一个唯一实例,整个容器里只有这一个对应springsingleton1的实例
  • springsingleton2:原型作用域,每次获取这个Bean都会创建新实例
  • springsingleton3:又是一个独立的单例Bean,和springsingleton1是完全分开的,容器会为这个ID单独维护另一个实例

这三个Bean只是共用了同一个类作为模板,但本身是Spring容器里不同的Bean对象,这种配置完全符合Spring的规则,所以自然不会抛出异常。

能不能创建Spring单例类的多个实例?

当然可以,常见的实现方式有几种:

  • 像你这样,在配置中为同一个类定义多个单例Bean,每个Bean ID对应一个独立的单例实例
  • 通过@Scope("prototype")或者XML里的scope="prototype"配置,让Spring每次获取该Bean时都生成新实例
  • 手动用new关键字创建类的实例(不过这种实例不受Spring容器管理,不属于Spring Bean的范畴)

举个代码示例验证一下:

ApplicationContext context = new ClassPathXmlApplicationContext("your-spring-config.xml");
SpringSingleton bean1 = context.getBean("springsingleton1", SpringSingleton.class);
SpringSingleton bean3 = context.getBean("springsingleton3", SpringSingleton.class);
System.out.println(bean1 == bean3); // 输出false,说明是两个不同的实例

这里要划重点:Spring的"单例"指的是在一个Spring容器中,同一个Bean ID/名称对应的实例仅存在一个,这和设计模式里的单例模式(一个类全局只有一个实例)是完全不同的概念,可别搞混啦~

内容的提问来源于stack exchange,提问作者pjj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:36