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

a5g8bdjr  于 2022-12-10  发布在  Spring
关注(0)|答案(4)|浏览(170)

假设我有一个实用程序类DateUtil(见下文)。要使用此方法,调用方方法使用DateUtils.getDateAsString(aDate)。删除static修饰符并使DateUtil成为一个spring bean(见DateUtilsBean)并将其注入到调用类中,还是保持原样更好?
使用static的一个缺点是mocking问题,请参见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;
    }
}
ruarlubt

ruarlubt1#

我不这么认为。DateUtils类听起来像是一个纯粹的实用程序类,没有任何副作用,只是处理输入参数。这种功能还不如保留在静态方法中。我不认为你很可能会想模仿日期助手方法。

jm2pwxwz

jm2pwxwz2#

我同意肖恩·帕特里克·弗洛伊德的观点。
这是我的准则:如果类的方法只对它们接收到的参数执行操作,而没有外部依赖项(数据库、文件系统、用户配置、其他对象/bean等),那么我会使用静态方法,通常是在带有私有构造函数的final类中。
否则,我将使用Springbean实现它。
所以,在你提出的例子中,根据这个标准,我会用静态方法写一个类。
祝你好运

ngynwnxp

ngynwnxp3#

最好将其声明为Spring bean,因为它的生命周期由Spring管理,您最终可以注入依赖项,池化对象,以及以适当的方式测试它,而不是说您可以将其用作常规对象并将其作为参数传递,在子类中重新定义方法......等等。
简而言之,是的,在大多数情况下,这是一个更好的设计。然而,在一个简单的情况下,因为暴露,它没有做很大的区别。

holgip5t

holgip5t4#

在这个评论中有一个很好的答案我应该在Spring单例bean中使用静态吗
一个静态变量在一个JVM中有一个示例。每个Spring上下文都有一个Singleton。如果你的应用程序只有一个上下文,它们做同样的工作。
但是不要把它们混在一起。在一些旧的项目中,我看到一些不纯的实用程序类通过ApplicationContext使用一些springbean。为它编写测试用例非常困难。

相关问题