Я читал весеннюю документацию на эту тему несколько раз, но некоторые вещи мне все еще неясны. В документации указано:
Если вы хотите внедрить (например) bean-компонент с областью действия HTTP-запроса в другой 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>
Здесь bean-компонент userManager имеет одноэлементную область видимости. Итак, мне интересно, применяется ли этот прокси только к bean-компонентам с одноэлементной областью видимости, то есть, если вы хотите внедрить bean-компонент с веб-областью в одноэлементные bean-компоненты, или это также относится к прототипам beans? Например, если userManager был задан как прототип?
I ' m спрашиваю об этом, потому что я видел код, который внедряет bean-компоненты с областью действия сеанса в прототипы без прокси-сервера aop, но я не уверен, что это правильно ... В частности, это были bean-компоненты DAO в некоторых веб-приложениях с областью действия session , и они были внедрены в контроллеры с областью действия прототипа для многопользовательской среды. Это правильный путь? Как вообще должна быть область видимости компонентов DAO / Service в среде веб-приложений?
Любая идея приветствуется.