Spring应用程序中的实用程序类 - 我应该使用静态方法吗?

时间:2011-09-01 13:02:09

标签: java spring methods static

假设我有一个实用程序类DateUtil(见下文)。要使用此方法 调用方法使用DateUtils.getDateAsString(aDate)。删除会更好吗? static修饰符并使DateUtil成为一个spring bean(请参阅DateUtilsBean)并将其注入调用类 或者只是保持原样?

使用静态我可以看到的一个缺点是关于模拟的问题,请参阅How to mock with static methods?

public class DateUtils {

    public static String getDateAsString(Date date) {       
        String retValue =  "" // do something here using date parameter
        return retValue;
    }
}

Spring Bean版

@Component
public class DateUtilsBean {

    public String getDateAsString(Date date) {      
        String retValue =  "" // do something here using date parameter
        return retValue;
    }
}

3 个答案:

答案 0 :(得分:28)

我不这么认为。 DateUtils类听起来像一个纯实用程序类,它没有任何副作用,只是处理输入参数。这种功能也可以保留在静态方法中。我认为你很可能不想模拟约会辅助方法。

答案 1 :(得分:12)

我同意Sean Patrick Floyd。

这是我的标准:如果类的方法只对它们接收的参数执行操作,没有外部依赖(数据库,文件系统,用户配置,其他对象/ bean等),那么我会这样做使用静态方法,通常在带有私有构造函数的final类中。

否则,我会使用Spring bean实现它。

所以,在你提出的情况下,根据这个标准,我会用静态方法编写一个类。

问候。

答案 2 :(得分:9)

最好将它声明为Spring bean,因为它的生命周期然后由Spring管理,你最终可以注入依赖项,汇集对象,以及以适当的方式测试它,而不是说话您可以将它用作常规对象并将其作为参数传递,重新定义子类中的方法...等。

简而言之,是的,在大多数情况下它会是更好的设计。然而,在暴露的简单情况下,它没有太大的区别。