让我们想象一下我想要一个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