Должен ли я получить сессию через 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 сервлета.