最终的Util Class Static vs Singleton Class

时间:2017-12-04 10:58:06

标签: java spring singleton static-methods

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

但是我不需要实现类,我只需要方法。所以对我而言,这是 困境

所以我做了一些研究,但我仍然没有想到如果我想要一个春天的单身豆或者。

Spring Singleton: 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

1 个答案:

答案 0 :(得分:0)

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

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

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