Подтвердить что ты не робот

Spring scope beans в качестве зависимостей в прототипе beans?

Я читал spring документы по этому вопросу несколько раз, но некоторые вещи до сих пор не ясны. Документация гласит:

Если вы хотите ввести (например) HTTP-запрос с областью bean в другой bean, вы должны ввести прокси-сервер AOP вместо области bean. То есть вам нужно ввести прокси-объект, который предоставляет тот же открытый интерфейс, что и объект с областью, но который также может извлекать реальный целевой объект из соответствующей области (например, HTTP-запрос) и делегировать вызов метода на реальный объект.

Пример конфигурации выглядит следующим образом:

<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
     <aop:scoped-proxy/>
</bean>

<bean id="userManager" class="com.foo.UserManager">
     <property name="userPreferences" ref="userPreferences"/>
</bean>

Здесь userManager bean используется как одноэлементный. Итак, мне интересно, применит ли этот прокси-сервер только только к singleton-scoped beans, то есть если вы хотите вставить веб-область bean в singleton beans, или она также применяется к прототипу beans? Например, если userManager был включен в качестве прототипа?

Я спрашиваю об этом, потому что я видел код, который вводит beans с сессией в прототипы без прокси-сервера, но я не уверен, что это правильно... В частности, это были DAO beans в каком-то веб-приложении, в виде сеанса, и они были введены в контроллеры с прототипом, для многопользовательской среды. Это правильный путь? Как вообще должно быть DAO/Service beans в области веб-приложений?

Любая идея будет оценена.

4b9b3361

Ответ 1

Вы всегда можете вводить bean более широкой области (например, singleton) в bean более узкой области видимости (например, bean в сеансе), но для этого наоборот, вам нужна область действия -proxy.

Таким образом, ваш пример ввода области bean с ограниченным сеансом в область bean с прототипом отлично, потому что область сеанса "шире", чем область прототипа.

Если вы ошибетесь, тогда Spring расскажет вам. Если он не жалуется, то вам это не нужно.