Каким образом Spring автоматически передает сессионные компоненты? - PullRequest
0 голосов
/ 08 января 2019

Я сейчас работаю с объектами сессии. В сервисном слое я занимаюсь сессионным бобом. И мне интересно, как Spring может это сделать? И еще более интересная часть, даже если я использую ключевое слово final и использую инъекцию конструктора, Spring все еще может автоматически связывать объект.

@Service
public class SomeServiceImpl implements SomeService {

    private final UserSessionDetails userSessionDetails;

    @Autowired
    public SomeServiceImpl(final UserSessionDetails userSessionDetails) {
        this.userSessionDetails = userSessionDetails;
    }
}

И другой мой вопрос; Это хорошая практика использования объектов сеанса в слое Service? Или я могу свободно использовать эти объекты в слоях Controller и Service?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Интересно, как Spring может это сделать?

SomeServiceImpl является синглтоном, поэтому он должен быть собран при запуске. Сборка bean-компонента означает внедрение всех необходимых зависимостей. Хотя некоторые кандидаты могут иметь область действия, отличную от области синглтона, они все еще должны быть предоставлены Для таких бинов Spring создает прокси. Прокси - это, по сути, бессмысленная оболочка, пока не появится какой-то контекст.

Если я использую ключевое слово final и использую инъекцию конструктора, Spring все еще может автоматически связать объект.

Spring поддерживает инжекцию на основе конструктора. Он проверяет подпись и ищет кандидатов для инъекций; модификаторы поля не имеют значения.

Является ли хорошей практикой использование объектов сеанса в слое Service? Или я могу свободно использовать эти объекты в слоях Controller и Service?

Пока служба ориентирована на веб-интерфейс и связана с сеансом, вы можете свободно вводить в нее bean-объекты сессионной области.

0 голосов
/ 08 января 2019

Вы выполняете автоматическое подключение по конструктору, поэтому использование слова final в этом случае ничего не меняет. Аннотируя UserSessionDetails как сессионный компонент и вставляя его в SomeServiceImpl, пружина генерирует прокси. Любой вызов от вашего сервиса передается в UserSessionDetails bean.

...