Closed. This question is opinion-based。它当前不接受答案。
                        
                    
                
            
        
            
        
                
                    
                
            
                
                    想改善这个问题吗?更新问题,以便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