Загружаются и инициализируются Sping Beans до выполнения статического блока других классов Java? - PullRequest
0 голосов
/ 13 сентября 2018

В одной из наших устаревших кодовых баз я обнаружил, что используется следующий шаблон, который кажется немного хрупким.Рассмотрим следующий 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() возвращению нуля некоторому классу вызывающего?

...