Spring Bean用于静态类

时间:2017-03-15 07:24:23

标签: java spring

我试图了解我的设计的缺点,下面是我的代码

class Utils {
    public static SpringBean bean;
    public static void setBean(SpringBean b){
        bean = b;
    } 
    public static SpringBean getBean(){
        return bean;
    }
    public static Object getSomethingFromBean(){
        return bean.getSomethingFromBean();
    }
}

下面是我的bean上下文xml

<bean id="utils" class="utils">
    <property name="bean" ref="springBean"></property>
</bean>

<bean id="springBean" class="SpringBean">
</bean>

我这样做,所以我可以直接调用utils类的方法,如

Utils.getSomethingFromBean();

1 个答案:

答案 0 :(得分:4)

Spring的观点是(简化这里)以避免通过静态方法或单例访问服务。使用Spring的所有原因都适用于为什么不使用这种方法。

此外,必须实例化一个仅限静态字段的类是一个很好的暗示,你做的事情至少是不寻常的。

最后,如上所述,Utils静态的内容是没有意义的 - 如果utils.getSomethingFromBean();是一个没有静态的普通bean,那么你也可以做Utils领域。如果你打算调用Utils.getSomethingFromBean();,你应该让调用者可以使用utils Spring bean,而不是使用静态方法。