From 0fc7c6fe0c64b302c8328b162a59238d8403eb88 Mon Sep 17 00:00:00 2001 From: Adam Gent Date: Tue, 14 May 2019 12:04:39 -0400 Subject: [PATCH] #55 ConfigProviderResolver lazy initialization The `ConfigProviderResolver` should not initialize on just being imported for a variety of reasons. The major reasons is makes initialization less predictable and bootstrapping more complicated. Performance is also a reason. Instead it should be initialized on access just like logging frameworks and many other Java frameworks. --- api/src/main/java/javax/config/ConfigProvider.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/javax/config/ConfigProvider.java b/api/src/main/java/javax/config/ConfigProvider.java index 189cdc7..bdc6cc8 100644 --- a/api/src/main/java/javax/config/ConfigProvider.java +++ b/api/src/main/java/javax/config/ConfigProvider.java @@ -71,7 +71,10 @@ * @author Viktor Klang */ public final class ConfigProvider { - private static final ConfigProviderResolver INSTANCE = ConfigProviderResolver.instance(); + + private static class LazyHolder { + private static final ConfigProviderResolver INSTANCE = ConfigProviderResolver.instance(); + } private ConfigProvider() { } @@ -86,7 +89,7 @@ private ConfigProvider() { * @return the config object for the thread context classloader */ public static Config getConfig() { - return INSTANCE.getConfig(); + return LazyHolder.INSTANCE.getConfig(); } /** @@ -100,6 +103,6 @@ public static Config getConfig() { * @return the config for the specified classloader */ public static Config getConfig(ClassLoader classloader) { - return INSTANCE.getConfig(classloader); + return LazyHolder.INSTANCE.getConfig(classloader); } }