Spring bean的静态方法。

时间:2018-09-18 07:36:10

标签: java spring static javabeans

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'。

您如何看待?

1 个答案:

答案 0 :(得分:1)

即使我认为编写这样的静态内容已损坏,我也不认为此特定代码很危险。

将在对象实例化之后立即调用setPrefix,因此不存在NPE的风险。

默认情况下,该对象为单例。因此也没有并发调用的风险。 但这是不好的代码设计。