java - 当我到处使用 Spring 时,是否值得拥有一个静态 Builder 类

标签 java spring

我使用 FooBuilder 类来构建 Foo 类的对象。 FooBuilder.create 接受一些初始参数,例如 idname。构建器不包含任何状态。

通常我会这样做

class FooBuilder {
  public static Foo create(...)

但是由于我工作的代码库使用 Spring在任何地方,是否仍然值得使用静态方法或更好地使其非静态并使用 Spring FooBuilder 单例?

除了与其余代码的一致性之外,还有其他支持/反对的论点吗?可扩展性(Spring+1,可以向构建器添加一些自定义)?测试(+1 Spring,很难模拟静态)? KISS(static 很简单)?

编辑:

  • Foo 需要在编译时构建(nameid 可以更改),构建器保持不变

最佳答案

由于您已经在使用 Spring,因此最好将其定义为 Spring 单例。这使得通过注入(inject)模拟构建器而不是真实的构建器来测试其他依赖服务变得更容易。

您可能希望将来对构建器进行子类化并重写某些方法,而使用静态方法是不可行的。

此外,您可能希望将来对 bean 应用一些 AOP,例如日志记录、安全性或性能跟踪,而使用静态会使其变得更加困难。

一般来说,使用 Spring 单例更加灵活,并且最好尝试减少静态方法的使用,仅使用非常通用的实用方法。

另请查看这篇关于 Tips for avoiding Static Method Overuse 的帖子。

关于java - 当我到处使用 Spring 时,是否值得拥有一个静态 Builder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22544340/

相关文章:

java - 了解 Java 中未初始化的对象

java - WEEK_OF_YEAR 在不同机器上不一致

java - Ajax 请求始终映射到根

java - Intellij 中新的 Spring Boot 项目构建失败

java - 如何更改 Spring STS 仪表板中的语言

java - 无法登录 Kylo

java - try catch block 中的 Mockito Thread.class 异常不会提高覆盖率

java - 无法创建事务 [Spring Boot + Hibernate]

java - 在 Spring mvc 应用程序中,@RequestBody 抛出 java.io.EOFException

json - Jpa实体关系导致死循环