我有以下弹簧配置。
<bean id="abcService1" class="com.service.ABCServiceImpl" />
<bean id="abcService2" class="com.service.ABCServiceImpl" />
spring 会为上述配置创建 2 个具有不同 id 的实例吗?如果是,那么尽管两个 bean 定义都是单例的,但我们仍然在上下文中有 2 个相同对象的实例。这是否意味着它不再是单例了?
是的。将创建两个单独的实例。是的,这不再是经典意义上的单例(每个 JVM 一个实例)-(如果曾经是的话),但是创建的 bean(它们中的每一个)具有单例范围(在 Spring 的含义中)。如果您真的想确保给定类的对象将始终是单例(每个 JVM 只有一个实例),请参阅将单例制作为 Spring bean 的正确方法。
但问题是你是否真的需要“真正的单身人士”?!
是的,对象将不再是Singleton
。
默认情况下,所有 Spring 注入的 bean 都是Singleton
,但如果你用两个不同的方式定义同一个 bean 两次,ids
那么 Spring 将创建two
实例。