在执行其他Java类的静态块之前,是否已加载并初始化Sping Bean?

时间:2018-09-13 00:49:06

标签: java spring static classloader static-block

在我们的旧版代码库中,我发现使用了以下模式,该模式似乎有些脆弱。考虑以下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中的静态块在Spring bean PropsProvider初始化之前被执行,导致UrlUtil.getImageUrl()返回null来电者类?

0 个答案:

没有答案