Junior — Middle
Spring-ში შესაძლებელია ერთ კომპონენტს ერთდროულად სინგლტონად და პროტოტიპად ქცევა, და როგორ გავაკეთოთ ეს?
sobes.tech AI
პასუხი AI-სგან
Spring-ში, დეფოლტად, ბინები შეიძლება იყოს სინგლტონები ან პროტოტიპები, მაგრამ ერთდროულად ვერ გამოაცხადება ბინას როგორც სინგლტონი და როგორც პროტოტიპი.
თუმცა, შესაძლებელია განახორციელოს სინგლტონ ბინი, რომელიც შიგნიდან ქმნის ახალი პროტოტიპის ეგზემპლარებს მოთხოვნის მიხედვით.
როგორ გავაკეთოთ:
- განსაზღვრეთ სინგლტონ ბინი (ნაგულისხმევი).
- განსაზღვრეთ პროტოტიპ ბინი.
- შეყვანეთ სინგლტონ ბინაში
ObjectProviderანApplicationContext, რათა მიიღოთ ახალი პროტოტიპის ეგზემპლარები საჭიროების მიხედვით.
მაგალითი 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("პროტოტიპის ეგზემპლარი: " + this);
}
}
ამ გზით, სინგლტონ ბინი ყოველ გამოძახებაზე შეუძლია შექმნას და გამოიყენოს ახალი პროტოტიპის ეგზემპლარები.