Junior — Middle
Είναι δυνατόν να υλοποιηθεί στο Spring ένα συστατικό που να λειτουργεί τόσο ως singleton όσο και ως πρωτότυπο, και πώς να το κάνουμε;
sobes.tech AI
Απάντηση από AI
Στο Spring, από προεπιλογή, τα beans είναι singleton ή prototype, αλλά δεν μπορεί να δηλωθεί ένα bean και ως singleton και ως prototype ταυτόχρονα.
Ωστόσο, είναι δυνατή η υλοποίηση ενός singleton bean που δημιουργεί νέα instances prototype κατόπιν αιτήματος.
Πώς το κάνουμε:
- Ορίστε ένα singleton bean (προεπιλογή).
- Ορίστε ένα prototype bean.
- Ενέσεις στο singleton bean ένα
ObjectProviderήApplicationContextγια να λαμβάνει νέα instances του prototype όταν χρειάζεται.
Παράδειγμα με ObjectProvider:
@Component
@Scope("singleton")
public class SingletonBean {
private final ObjectProvider<PrototypeBean> prototypeBeanProvider;
public SingletonBean(ObjectProvider<PrototypeBean> prototypeBeanProvider) {
this.prototypeBeanProvider = prototypeBeanProvider;
}
public void usePrototype() {
PrototypeBean prototype = prototypeBeanProvider.getObject();
prototype.doSomething();
}
}
@Component
@Scope("prototype")
public class PrototypeBean {
public void doSomething() {
System.out.println("Prototype instance: " + this);
}
}
Έτσι, το singleton bean μπορεί να δημιουργεί και να χρησιμοποιεί νέα instances του prototype σε κάθε κλήση.