ServiceLoader load — дублирующий класс, который загружается первым?

#java

#java

Вопрос:

При использовании ServiceLoader.load(X.class ) и есть 2 файла jar, которые содержат определения для X.class какой из них будет развернут?

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

Это проблема, поскольку определения немного отличаются.

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

Комментарии:

1. Насколько я понимаю, все найденные классы загружаются в том порядке, в котором они отображаются в classpath. Но поскольку API не указывает это, это неопределенно. и даже если это правда, это может измениться с более поздними версиями Java.

2. Это зависит от порядка, в котором файлы определения service loader для интерфейса отображаются в CLASSPATH.

Ответ №1:

Это зависит от версии Java, типа и версии сервера приложений, возможно, даже настроек файловой системы и, кто знает, чего еще. Я думаю, достаточно сказать, что нет никакой гарантии в отношении порядка, и это то, на что вы никогда не должны полагаться.