Почему мы используем init (), а не Constructor - PullRequest
2 голосов
/ 21 февраля 2012

зачем нам init(), а не constructor?

Пожалуйста, ответьте со ссылкой Servlet и Applet.
Чем init() из Applet отличается от Servlet?

Ответы [ 4 ]

10 голосов
/ 21 февраля 2012

Метод init() создает и загружает сервлет.Но экземпляр сервлета сначала создается через конструктор (выполняется контейнером сервлета).Мы не можем писать конструкторы класса сервлета с аргументами в сервлете (это вызовет исключение).Итак, они предоставили метод init(), который принимает объект ServletConfig в качестве аргумента.Объект ServletConfig предоставляет сервлету информацию о его параметрах инициализации (init).Класс сервлета не может объявить конструктор с объектом ServletConfig в качестве аргумента и не может получить доступ к объекту ServletConfig.

Более подробная информация по адресу: http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets6.html

2 голосов
/ 21 февраля 2012

Это выбор дизайна.В спецификации сервлета сказано, что вы должны предоставить конструктор без аргументов и переопределить метод init() для выполнения задач инициализации.Они могли бы поступить иначе и потребовать, чтобы сервлеты имели конструктор с одним аргументом (ServletConfig), который может выбрасывать ServletException.Технически, с этим нет проблем, так как API отражения позволяет вам вызывать любой конструктор, объявленный в классе.

Однако наличие метода init() позволяет контейнерам сервлетов предварительно создавать объекты и задерживать их инициализацию.Это помогает разделить разные этапы жизненного цикла.

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

2 голосов
/ 21 февраля 2012

Вам нужны оба, но они выполняют разные действия, ваш конструктор выполняется во время создания объекта посредством вызова new, но для некоторого типа объектов, где вы не контролируете их создание, или вы предпочитаете выполнить некоторые код не только после того, как объект создан, но и полностью инициализирован, тогда вам нужен специальный метод, который кто-то собирается вызвать, чтобы сообщить, что объект готов.

Это особенно касается объектов, которые управляются не вами, а сервером, инфраструктурой или теми, кто управляет этими объектами.

Вы должны видеть эти методы как товар, предоставленный вам в верхней части кода, который этот объект будет выполнять в конструкторе

0 голосов
/ 05 февраля 2019

метод init () вызывается только один раз, и поэтому будет создан только один экземпляр элемента управления.

...