Imaginons que je veux un seul not.my.Clock
par ma demande:Comment définir un objet singleton pour une classe que je n'ai pas écrite en Java EE?
public final class Clock {
... // business
}
Je peux écrire ce qui suit:
@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()
}
Comment puis-je définir un objet singleton pour mon application entière au lieu d'un fournisseur de singleton, afin que je puisse écrire le code suivant? Le tutoriel 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.
}
Si je devais écrire ce dans Guice, j'écrire quelque chose comme ceci:
bind(Clock.class).toInstance(...);
Ou
@Provides @Singleton Clock provideClock() {
return ... ;
}
Ne peut pas vous étendre 'Clock' dans une SingletonClock de classe' @Singleton étend Clock'? – daniu
@daniu Non parce que je reçois l'instance unique d'un endroit où je n'ai pas la main. En outre, j'ai pris 'Clock' comme exemple, pas comme mon cas d'utilisation réel. Mais pour la question, imaginons que la classe 'Clock' soit finale aussi. Je vais adapter la question –
utiliser CDI '@Produces @ ApplicationScoped' sur' public Clock get() 'méthode – Rouliboy