public class QuestionStaticObject {
private static String staticprefix;
private static BeanFactory factory;
@Value("${account.prefix}")
public void setPrefix(String prefix) {
staticprefix = prefix;
}
public static String getPrefix() {
return staticprefix;
}
@Autowired
public void setFactory(BeanFactory f) {
factory = f;
}
public static BeanFactory getFactory() {
return factory;
}
public static String foo1(String id) {
String uuid = getPrefix() + id + "-" + System.currentTimeMillis() / 1000;
return uuid;
}
public static boolean foo2() throws GFMException {
OtherObject obj = getFactory().getBean(OtherObject.class);
return obj.foo1();
}
}
“我的团队”的工作人员在上面编写Java代码。但是我认为代码非常危险,因为如果spring bean的加载晚了,那么static方法将引用null factory或null'staticprefix'。
您如何看待?
答案 0 :(得分:1)
即使我认为编写这样的静态内容已损坏,我也不认为此特定代码很危险。
将在对象实例化之后立即调用setPrefix,因此不存在NPE的风险。
默认情况下,该对象为单例。因此也没有并发调用的风险。 但这是不好的代码设计。