Sobes.tech
Junior — Middle

Spring-də həm singleton, həm də prototip kimi davranan bir komponenti həyata keçirmək mümkündürmü və bunu necə etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Spring-də, varsayılan olaraq, bean'lər singleton və ya prototip ola bilər, amma eyni zamanda həm singleton, həm də prototip kimi elan etmək mümkün deyil.

Ancaq, içində yeni prototip nümunələri yaradan singleton bean-i həyata keçirmək mümkündür.

Bunu necə etmək olar:

  1. Singleton bean-i təyin edin (varsayılan).
  2. Prototip bean-i təyin edin.
  3. Singleton bean-ə, ehtiyac olduqda yeni prototip nümunələri almaq üçün ObjectProvider və ya ApplicationContext-i enjekte edin.

ObjectProvider ilə nümunə:

@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("Prototip nümunəsi: " + this);
    }
}

Beləliklə, singleton bean hər çağırışda yeni prototip nümunələri yarada və istifadə edə bilər.