Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
我的团队的工作人员在上面编写Java代码。但是我认为该代码非常危险,因为如果spring bean的加载延迟,则static方法将引用null factory或null'staticprefix'。
您如何看待?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
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'。
您如何看待?
最佳答案
即使我认为编写这样的静态内容已损坏,我也不认为此特定代码很危险。
setPrefix将在对象实例化之后立即调用,因此不存在NPE的风险。
默认情况下,该对象为单例。因此也没有并发调用的风险。
但这是不好的代码设计。
07-25 23:14