Должен ли я получить сессию через SessionAware или ActionContext?

После прочтения различий между получением карты сеанса через ActionContext.getContext().getSession() и впрыскивая его черезSessionAware Мне было интересно, какой метод предпочтительнее и почему?

API рекомендует использовать SessionAwareи я прочитал в Интернете, что с помощью SessionAware облегчает тестирование приложения - является ли тестирование единственной проблемой?

Может кто-нибудь немного рассказать об этом или указать ссылки, объясняющие это?

2 ответа

Я уже ответил тем же на ваш предыдущий вопрос. Вы можете использовать любой из этих способов или даже получить доступ к сеансу несколькими способами.

в одну сторону

Map attibutes = ActionContext.getContext().getSession();

Но если вы используете это, и ваш класс действий напрямую связан с ActionContext который является специфическим для Struts2 способом. Одной из основных целей Struts2 является отделение классов Action от базового HTTP-контекста, а также от других прямых зависимостей. Также написание тестовых случаев для простого POJO намного проще и лучше, чем другие.

Осуществляя SessionAware Интерфейс, который вы указываете Struts2, что вы хотите, чтобы сессия представляла собой простой объект карты, это не только делает код сильно отделенным, но и простым в обслуживании и тестировании.

Я надеюсь, что кто-то еще придет с большим количеством хороших моментов в этом

SessionAware является подходом внедрения зависимости, тогда как ActionContext.getContext().getSession() не является. В остальном они идентичны. Оба эти подхода возвращают вам Map<String, Object> в отличие от HttpSession которая является частью API сервлета.

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