В одной из наших устаревших кодовых баз я обнаружил, что используется следующий шаблон, который кажется немного хрупким.Рассмотрим следующий Spring Bean:
@Component
public class PropsProvider {
private static Properties props;
@Inject
PropsProvider(Configuration config) {
PropsProvider.props = ConfigurationConverter.getProperties(config);
}
public static String getProperty(String key) {
return props.getProperty(key);
}
}
, который затем будет ссылаться внутри простого Java-класса статическим образом, как показано ниже:
public class UrlUtil {
private static String IMAGE_URL;
static {
IMAGE_URL = PropsProvider.getProperty("image_url");
}
private UrlUtil() {}
public static void String getImageUrl() {
return IMAGE_URL;
}
}
Может ли быть случай, когда во времявремя запуска сервера, статический блок в UrlUtil
выполняется до того, как bean-компонент Spring PropsProvider
инициализируется, что приводит к UrlUtil.getImageUrl()
возвращению нуля некоторому классу вызывающего?