Sobes.tech
Junior — Middle

Spring-ში შესაძლებელია ერთ კომპონენტს ერთდროულად სინგლტონად და პროტოტიპად ქცევა, და როგორ გავაკეთოთ ეს?

sobes.tech AI

პასუხი AI-სგან

Spring-ში, დეფოლტად, ბინები შეიძლება იყოს სინგლტონები ან პროტოტიპები, მაგრამ ერთდროულად ვერ გამოაცხადება ბინას როგორც სინგლტონი და როგორც პროტოტიპი.

თუმცა, შესაძლებელია განახორციელოს სინგლტონ ბინი, რომელიც შიგნიდან ქმნის ახალი პროტოტიპის ეგზემპლარებს მოთხოვნის მიხედვით.

როგორ გავაკეთოთ:

  1. განსაზღვრეთ სინგლტონ ბინი (ნაგულისხმევი).
  2. განსაზღვრეთ პროტოტიპ ბინი.
  3. შეყვანეთ სინგლტონ ბინაში 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);
    }
}

ამ გზით, სინგლტონ ბინი ყოველ გამოძახებაზე შეუძლია შექმნას და გამოიყენოს ახალი პროტოტიპის ეგზემპლარები.