【问题标题】:final Util Class Static vs Singleton Classfinal Util Class Static vs Singleton Class
【发布时间】:2017-12-04 10:58:06
【问题描述】:

目前我正在尝试实现一个以 PDF 格式生成发票的实用程序类,我预计之后我需要将 spring bean 注入到我的实用程序类中。

但是我不需要实例化类,我只需要方法。所以对我来说这是一个两难境地

所以我做了一些研究,但我仍然没有下定决心如果我想要一个弹簧单例豆或。

春季单身: Source

@Service
public class Singleton {

private static AtomicReference<Singleton> INSTANCE = new AtomicReference<Singleton>();

public Singleton() {
    final Singleton previous = INSTANCE.getAndSet(this);
    if(previous != null)
        throw new IllegalStateException("Second singleton " + this + " created after " + previous);
}

public static Singleton getInstance() {
    return INSTANCE.get();
}
}

或最后一个类:

 public final InvoiceUtil {

  private InvoiceUtil() {} 

  public static String convertToPDF (Template template) {
    //Do the work
  }

 }

但是使用第二种方法,我的类不是由 Spring 管理的,所以我不能向它注入 bean。

让我无法理解! :p

【问题讨论】:

  • 我已经看过那个帖子了,我的问题是我不知道哪种方法适合我的情况
  • 如果你不需要某个东西的实例,就不要它的实例;特别是不要使用单例的实现,因为它不起作用(getInstance() 返回 null)。
  • 我不知道spring beans但是afaik如果你不关心程序重新启动时的先前状态,那么创建一个单例
  • @AndyTurner,但是我应该如何使我的课程成为最终课程并使用静态方法,并且我还让它成为弹簧管理的(通过使用 @Service 注释它)?

标签: java spring singleton static-methods


【解决方案1】:

如果您使用 Spring bean,请不要使用 getInstance() 将 Spring Service 实现为 Singleton。只需添加@Service,Spring 只会实例化一次。

您可以使用静态方法,然后将任何依赖项也传递给这些方法(如果这些依赖项很少):

public static String convertToPDF (Template template, NeededHelper helper) {
     ...
}

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 2016-02-23
    • 2019-02-20
    • 1970-01-01
    • 2020-12-08
    • 2013-11-08
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多