Fix when duplication spi class found using SpiLoader (#3387)

This commit is contained in:
cdfive 2024-04-28 09:53:01 +08:00 committed by GitHub
parent cd02b1dc8d
commit dbd3c06ca7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 11 additions and 6 deletions

View File

@ -371,8 +371,13 @@ public final class SpiLoader<S> {
fail("class " + line + " not found", e);
}
if (classMap.containsValue(clazz)) {
RecordLog.warn("duplicate class found,className=" + clazz.getName() + ",SPI configuration file[" + url + "]");
continue;
}
if (!service.isAssignableFrom(clazz)) {
fail("class " + clazz.getName() + "is not subtype of " + service.getName() + ",SPI configuration file=" + fullFileName);
fail("class " + clazz.getName() + "is not subtype of " + service.getName() + ",SPI configuration file[" + url + "]");
}
classList.add(clazz);
@ -381,13 +386,13 @@ public final class SpiLoader<S> {
if (classMap.containsKey(aliasName)) {
Class<? extends S> existClass = classMap.get(aliasName);
fail("Found repeat alias name for " + clazz.getName() + " and "
+ existClass.getName() + ",SPI configuration file=" + fullFileName);
+ existClass.getName() + ",SPI configuration file[" + url + "]");
}
classMap.put(aliasName, clazz);
if (spi != null && spi.isDefault()) {
if (defaultClass != null) {
fail("Found more than one default Provider, SPI configuration file=" + fullFileName);
fail("Found more than one default Provider,className=" + clazz.getName() + ",SPI configuration file[" + url + "]");
}
defaultClass = clazz;
}
@ -400,7 +405,7 @@ public final class SpiLoader<S> {
, spi == null ? 0 : spi.order());
}
} catch (IOException e) {
fail("error reading SPI configuration file", e);
fail("error reading SPI configuration file[" + url + "]", e);
} finally {
closeResources(in, br);
}