При вызове context.getBean("singletonBean")
всегда он содержит один и тот же экземпляр instanceBean
, хотя область действия prototype
в определении компонента.
Напротив, если контейнерный компонент имеет область действия prototype
и относится к компоненту, который определен с областью действия singleton
, всегда внутренний компонент будет иметь значение singleton. Например: -
<bean id="outer" class="OuterBean" scope="prototype">
<property name="innerBean" ref="inner" />
</bean>
<bean id="inner" class="InnerBean" scope="singleton"/>
OuterBean outer1 = (OuterBean) context.getBean("outer");
OuterBean outer2 = (OuterBean) context.getBean("outer");
Здесь и outer1
, и outer2
будут содержать один и тот же экземпляр InnerBean
.
В многопоточной среде, если innerBean
содержит какие-либо общие данные, это может привести к состоянию гонки.