Как установить имя атрибута сеанса Spring bean-компонента?

Учитывая Spring bean, настроенный с областью сеанса, такой как:

@Component
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value=WebApplicationContext.SCOPE_SESSION)
public class SomeBean {
}

Есть ли способ контролировать имя, под которым Spring будет хранить bean-компонент в сеансе http?

По умолчанию пружинные швы используют ключ сеанса scopedTarget.someBean. Есть ли что-нибудь, что я могу добавить к аннотациям, чтобы явно указать имя атрибута в сеансе?


person ams    schedule 14.05.2012    source источник
comment
Не без повторной реализации SessionScope, предоставленной Spring. Компоненты области сеанса предназначены для использования Spring, они не предназначены для хранения вещей в сеансе, и вы получаете их на странице (или где-либо еще) для отображения информации.   -  person M. Deinum    schedule 28.11.2019


Ответы (2)


я бы использовал:

@Component (value="mySpecialName")
@Scope (value="session")
person Jonathan    schedule 14.05.2012
comment
это не работает, компонент заканчивается идентификатором mySpecialName, но в сеансе атрибут, в котором хранится bean-компонент, по-прежнему является scopedTarget.mySpecialName. Я действительно хочу контролировать атрибут в сеансе http, в котором хранится установленная область сеанса. - person ams; 14.05.2012
comment
Я изменил свой ответ, включив в него @Scope. В моем коде мне не нужно было устанавливать proxyMode. - person Jonathan; 14.05.2012

Тебе нельзя. Часть scopedTarget жестко запрограммирована при создании прокси-сервера с ограниченной областью действия в Spring. Так что без переписывания частей фреймворка это просто невозможно.

Имя жестко закодировано в ScopedProxyBeanDefinitionDecorator, который делегирует ScopedProxyUtils.

Тот факт, что вы используете прокси-сервер с ограниченной областью действия, является внутренним для фреймворка. Вы, вероятно, захотите использовать его для хранения чего-либо в сеансе и извлечения его на странице или что-то в этом роде. Не делайте этого, просто выставьте обычный bean-компонент, который будет делегирован экземпляру с соответствующей областью действия.

person M. Deinum    schedule 28.11.2019