Какой смысл @WebInitParam? - PullRequest
       4

Какой смысл @WebInitParam?

0 голосов
/ 07 сентября 2018

@ WebInitParam - аннотация, которая идет на уровне класса. Он определяет параметры инициализации для сервлета.

Я хотел бы знать, в чем разница между этим и использованием статических переменных, и почему это делается способом @WebInitParam, а не статикой?

Что позволяет определить пары k / v как @WebInitParams, что вы не можете сделать, если вместо этого объявите статические переменные?

Я посмотрел и все, что я могу найти, - это миллион людей, говорящих, как определить @WebInitParams. Ну да, это легко. Это то, что я могу сделать с этим, что действительно представляет интерес.

Большое спасибо.

1 Ответ

0 голосов
/ 08 сентября 2018

С точки зрения "raison d'etre" аннотация существует как лучшая альтернатива дизайну и архитектуре, чем просто добавление класса со статическими полями.@WebInitParam - это самодокументируемый подход к параметрам инициализации, который необходим сервлету или классу фильтра, который также доступен через web.xml.Он служит этой цели как для конечных разработчиков, так и для платформы JavaEE в целом.

Подумайте об этом так: в проекте vanilla у вас есть возможность жестко кодировать набор параметров в классе как статические поля или определять те же параметры в файле свойств.Что бы вы выбрали?При каких обстоятельствах?

С чисто функциональной точки зрения, помимо функции , использующей аннотацию для переопределения значений по умолчанию, установленных в web.xml , еще одной важной причиной являетсячто вам иногда потребуется получить эти параметры инициализации от другого компонента в вашем приложении.Использование аннотации существенно увеличивает видимость параметра.Например, в JSF API позволяет извлекать параметры инициализации FacesServlet с помощью:

 //get all the parameters
FacesContext.getCurrentInstance().getExternalContext().getInitParameterMap()

//get a specific parameter 
 FacesContext.getCurrentInstance().getExternalContext().getInitParameter("aParameter");

В JSF-2.3 это становится еще удобнее при следующей инъекции с поддержкой CDI:

 @InitParameterMap Map<String,String> servletParameterMap;

Имейте в виду, что, поскольку это CDI, это означает, что эта возможность доступна на всей платформе JavaEE, а не только в веб-приложениях / JSF.

Будет трудно получить параметры инициализации, если доступен только механизмявляется статическим полем в классе сервлетов - вам нужно получить экземпляр фильтра или сервлета, чтобы получить статические поля в нем.

Отдельно можно привести аргумент, что, возможно, следует отдавать предпочтение контекстным параметрам по сравнению с сервлетными, потому что тогда вы получите еще большую гибкость, которая не привязана к какому-либо сервлету.Это отдельный вопрос целиком:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...