статическая и динамическая загрузка класса?

Почему я должен загрузить определение класса как:

Class.forName ("Имя класса");

Что является потребностью и преимуществом этого.Typically, который используется для загрузки класса драйвера в JDBC.

7
задан JavaUser 27 June 2010 в 03:30
поделиться

3 ответа

Какая в этом необходимость и польза. Обычно используется для загрузки класса драйвера в JDBC.

Это позволяет вам создавать ваши приложения так, чтобы ключевые внешние зависимости не компилировались в исходный код приложения.

Например, в случае JDBC он позволяет переключаться между различными реализациями драйверов и (теоретически) разными поставщиками баз данных без изменения исходного кода.

Другой вариант использования - когда какой-либо поставщик разрабатывает универсальную форму приложения с точками расширения, которые позволяют клиентам «подключать» свои собственные пользовательские классы. Пользовательские классы обычно загружаются с использованием Class.forName (...) .

Третий вариант использования - это каркасы приложений и контейнеры, которые обычно используют Class.forName (...) под капотом для динамической загрузки классов для конкретных приложений bean-компонентов, сервлетов и так далее.

Четвертый вариант использования - это когда приложение (или, что более вероятно, библиотека приложения) имеет модули, которые не используются при типичном запуске приложения. Используя внутреннее использование Class.forName (...) , приложение или библиотека могут избежать накладных расходов ЦП и памяти, связанных с загрузкой и инициализацией большого количества нежелательных классов. (Библиотеки Sun Swing, по-видимому, делают это для сокращения времени запуска приложений, и я уверен, что есть и другие примеры.)

Однако, если вы не , вам понадобится , чтобы иметь возможность делать такого рода Дело в том, что статические зависимости проще реализовать.

FOLLOWUP

Но здесь при компиляции известен параметр "ClassName".Итак, ключевая внешняя зависимость встроена в исходный код приложения ??

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

10
ответ дан 6 December 2019 в 23:00
поделиться

Не правда ли. ClassName.class также будет работать. В любом случае, получение определения класса таким способом обычно является способом, которым реализации SPI внедряются в API .

1
ответ дан 6 December 2019 в 23:00
поделиться

Самая простая причина использования Class.forName (string className) - это

  • В JDBC оператор используется для загрузки и регистрации DriverClass в DriverManager. Другой способ сделать это - использовать метод registerDriver (Driver obj), который принимает объект класса драйвера. Использование вышеуказанного оператора помогает нам избежать непосредственной обработки объекта драйвера.
  • Большинство приложений используют файлы свойств для определения соединения JDBC и свойств драйвера. Этот тип динамической загрузки помогает нам сделать приложение более переносимым, поскольку драйвер может быть настроен без изменения источника. .
0
ответ дан 6 December 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: