在我们的旧版代码库中,我发现使用了以下模式,该模式似乎有些脆弱。考虑以下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来电者类?