diff --git a/validator/src/main/java/io/avaje/validation/core/DValidator.java b/validator/src/main/java/io/avaje/validation/core/DValidator.java index 5ad7b80e..1674b101 100644 --- a/validator/src/main/java/io/avaje/validation/core/DValidator.java +++ b/validator/src/main/java/io/avaje/validation/core/DValidator.java @@ -286,13 +286,12 @@ public Builder messageInterpolator(MessageInterpolator interpolator) { return this; } - private void registerComponents() { - ExtensionLoader.init(classLoader); + private void registerComponents(ExtensionLoader loader) { // first register all user defined ValidatorCustomizer - for (final ValidatorCustomizer next : ExtensionLoader.customizers()) { + for (final ValidatorCustomizer next : loader.customizers()) { next.customize(this); } - for (final GeneratedComponent next : ExtensionLoader.generatedComponents()) { + for (final GeneratedComponent next : loader.generatedComponents()) { next.customize(this); } } @@ -304,12 +303,13 @@ public Validator build() { return DEFAULT; } - registerComponents(); + final var loader = new ExtensionLoader(classLoader); + registerComponents(loader); final var localeResolver = new LocaleResolver(defaultLocale, otherLocales); final var interpolator = Optional.ofNullable(this.userInterpolator) - .or(ExtensionLoader::interpolator) + .or(loader::interpolator) .orElseGet(BasicMessageInterpolator::new); return new DValidator( diff --git a/validator/src/main/java/io/avaje/validation/core/ExtensionLoader.java b/validator/src/main/java/io/avaje/validation/core/ExtensionLoader.java index 4cac220d..47fb5e9b 100644 --- a/validator/src/main/java/io/avaje/validation/core/ExtensionLoader.java +++ b/validator/src/main/java/io/avaje/validation/core/ExtensionLoader.java @@ -15,13 +15,13 @@ /** Load all the services using the common service interface. */ final class ExtensionLoader { - private static final List generatedComponents = new ArrayList<>(); - private static final List customizers = new ArrayList<>(); - private static final List adapterFactories = new ArrayList<>(); - private static final List annotationFactories = new ArrayList<>(); - private static Optional interpolator = Optional.empty(); + private final List generatedComponents = new ArrayList<>(); + private final List customizers = new ArrayList<>(); + private final List adapterFactories = new ArrayList<>(); + private final List annotationFactories = new ArrayList<>(); + private Optional interpolator = Optional.empty(); - static void init(ClassLoader classLoader) { + ExtensionLoader(ClassLoader classLoader) { for (var spi : ServiceLoader.load(ValidationExtension.class, classLoader)) { if (spi instanceof GeneratedComponent gc) { generatedComponents.add(gc); @@ -37,23 +37,23 @@ static void init(ClassLoader classLoader) { } } - static Optional interpolator() { + Optional interpolator() { return interpolator; } - static List generatedComponents() { + List generatedComponents() { return generatedComponents; } - static List customizers() { + List customizers() { return customizers; } - static List adapterFactories() { + List adapterFactories() { return adapterFactories; } - static List annotationFactories() { + List annotationFactories() { return annotationFactories; } }