Singleton = "false" больше не поддерживается в Spring 4.3.8. Нужно решение

Мы обновляем Spring 3.2.4 до Spring 4.3.8, в которой singleton = "false" больше не поддерживается. Как можно установить синглтон false в Spring 4.3.8? Если singeton = "false", значит ли это, что область видимости компонента Spring стала "Prototype"?

0
0
1 526
3

Ответы 3

Вы можете использовать @Scope для указания прототипа bean-компонента.

Example:
@Bean @Scope("prototype")
public Person personPrototype() {
    return new Person();
}

для дальнейшего чтения следуйте ссылка на сайт

Насколько я помню, singleton=false был сохранен по некоторым причинам совместимости, что также указано в некоторых более старых документы, например 3.0.0.M3:

<bean id = "accountService" class = "com.foo.DefaultAccountService"/>

the following is equivalent, though redundant (singleton scope is the default); using spring-beans-2.0.dtd
<bean id = "accountService"> class = "com.foo.DefaultAccountService" scope = "singleton"/>

the following is equivalent and preserved for backward compatibility in spring-beans.dtd<bean id = "accountService"> class = "com.foo.DefaultAccountService" singleton = "true"/>

В любом случае, весенняя область действия по умолчанию - singleton, поэтому даже если не указано иное, но можно изменить на prototype (или что угодно) с помощью:

  • XML: scope = "prototype"
  • Java DSL: @Scope("prototype") или @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

Правильно, scope = "prototype" является прямым эквивалентом singleton = "false".

  • Эквивалент singleton = "false" - scope = "prototype".
  • другой альтернативой является использование аннотации @Scope ("прототип")
  • Эквивалентом singleton = "true" было бы исключение этого атрибута в конфигурации spring, поскольку по умолчанию будет использоваться scope = "singleton".

Другие вопросы по теме