Какой класс будет загружаться первым при запуске веб-приложения? - PullRequest
2 голосов
/ 24 мая 2009

У меня есть веб-приложение и два файла классов,

Первый класс - MyClass.class , который находится внутри файла abc.jar (WEB-INF / lib / abc.jar) и Второй класс - YourClass.class , который находится в папке классов (WEB-INF / classes / YourClass.class).

У меня вопрос, какой класс будет загружаться первым при запуске приложения? И почему?

Ответы [ 4 ]

9 голосов
/ 24 мая 2009

По моему опыту, вы не можете предсказать порядок загрузки классов JVM.

Однажды я создал тестовый прогон (вроде Surefire от Maven) и с той же JVM и ОС загружал классы в разном порядке при запуске на разных машинах. Извлеченный урок:

Вы не должны создавать свои приложения зависеть от класса загрузки порядка

5 голосов
/ 24 мая 2009

Классы загружаются по мере необходимости, для некоторого определения «необходимо». То, когда класс загружается, зависит от реализации JRE, реализации javac, от того, какой поток предназначен, кода сервера и, конечно же, кода приложения. Это плохая идея делать предположения в этой области. Если вы хотите увидеть, что происходит с конкретным прогоном, вы можете использовать -verbose:class

3 голосов
/ 24 мая 2009

Документы загрузчика классов Sun всегда говорят WEB-INF / classes или WEB-INF / lib, но не говорят, какой из них будет проверен первым.

Из IBM docs :

"Правила загрузки классов подробно изложены в спецификации JVM. Основной принцип заключается в том, что классы загружаются только при необходимости (или, по крайней мере, кажется, что загружаются таким образом - JVM имеет некоторую гибкость в фактической загрузке, но должен поддерживать фиксированную последовательность инициализации класса.) Каждый загружаемый класс может иметь другие классы, от которых он зависит, поэтому процесс загрузки является рекурсивным. "

Так что я думаю, что ответ таков: это зависит от того, какие классы нужны в вашем приложении.

1 голос
/ 24 мая 2009

Как указывает Даффимо, это может варьироваться. Одним из способов определения последовательности для этого конкретного приложения является вставка текста Response.Write в конструкторы классов и методы загрузки страниц веб-приложения. «Созданный объект в классе A», «Открытая веб-страница MyPage» и т. Д.

После того, как вы выяснили последовательность, закомментируйте код для них, чтобы вы могли использовать их позже, чтобы убедиться, что вы не внесли изменений (таких как создание объекта ранее или позже), которые влияли на последовательность. 1003 *

...