【发布时间】: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