讓我們想象一下我想要一個not.my.Clock
通過我的應用程序:如何爲我未在Java EE中編寫的類定義單例對象?
public final class Clock {
... // business
}
我可以寫:
@Singleton
public class ClockProvider implements Supplier<Clock> {
private Clock clock;
@PostConstruct
void init() {
clock = ... ;
}
@Override
public Clock get() {
return clock;
}
}
@RequestScoped
public class MyBean {
@Inject ClockProvider clockProvider;
// Use clockProvider.get()
}
我如何定義一個單獨的對象爲我的整個應用程序而不是一個單供應商,這樣我可以編寫下面的代碼? Java EE 7教程only speaks about singleton session bean, not singleton objects。
@RequestScoped
public class MyBean {
@Inject Clock clock;
// Use clock directly: no clock-provider.
}
如果我不得不在吉斯寫這個,我會寫這樣的事:
bind(Clock.class).toInstance(...);
或者
@Provides @Singleton Clock provideClock() {
return ... ;
}
你能不能延長'Clock'成'@辛格爾頓類SingletonClock擴展Clock'? – daniu
@daniu不,因爲我實際上從某個地方得到了獨一無二的實例,我沒有把它放在手上。另外,我拿'Clock'作爲例子,而不是我真正的用例。但爲了這個問題,讓我們想象一下'Clock'類也是最終的。我將修改 –
在'public Clock get()'方法上使用CDI'@Produces @ ApplicationScoped' – Rouliboy