Почему драйверы JDBC регистрируются в статическом инициализаторе классов? - PullRequest
2 голосов
/ 08 марта 2011

Какова логика использования Class.forName() для загрузки драйвера JDBC вместо драйверов, предоставляющих какой-то статический метод для того же действия?

Например, почему бы вместо этого не позвонить SomeDriverClass.loadDriver(); и продолжить обычное соединение? По какой-либо причине звонок на java.sql.DriverManager.registerDriver() не мог произойти таким образом?

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Таким образом, код не должен иметь класс драйвера в classpath во время компиляции. Вы не хотите иметь бесчисленное множество различных драйверов JDBC прошлого, настоящего и будущего в classpath времени компиляции, чтобы сделать ваш код JDBC совместимым со всеми этими базами данных. Вы не хотите перекомпилировать код при каждом обновлении / замене драйвера или БД. Все, что вам нужно, это имя класса драйвера в String, которое может быть настроено извне (обычно это свойства или файл XML).

Другими словами: портативность и возможность повторного использования.

Если это для вашего личного использования, делайте что хотите. Но если вы сделали это в библиотеке, которая должна распространяться публично (например, ORM или какой-либо инструмент управления базами данных), она не станет популярной, потому что конечный пользователь должен захватывать исходный код и изменять / перекомпилировать его каждый раз, когда он не сделал этого. не поддерживает свою базу данных.

0 голосов
/ 08 марта 2011

Это часть инфраструктуры поставщика услуг. Класс объекта, возвращаемого статическим методом фабрики, даже не должен существовать во время написания класса, содержащего метод. Это позволяет использовать заполнитель, в который можно включить несколько реализаций во время выполнения.

Каркас поставщика услуг - это система, в которой несколько поставщиков услуг реализуют услугу, и система делает реализации доступными для своих клиентов, отделяя их от реализаций.

Если его somedriver.loadDriver (), то реализация тесно связана.

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