Sobes.tech
Junior — Middle

Қолданбаны іске қосу кезінде Bean-ді динамикалық түрде қайта анықтау немесе ауыстыру мүмкін бе?

sobes.tech AI

AI-дан жауап

Стандартты Spring Framework-те жұмыс кезінде Bean-ді динамикалық түрде қайта анықтау немесе ауыстыру мүмкін емес, себебі Spring контексті іске қосу кезінде құрылады және биндерді анықтау тұрғысынан өзгермейді.

Алайда, ұқсас әсерге жету үшін бірнеше тәсіл бар:

  • @Primary және профильдерді пайдалану арқылы қажетті іске асыруды таңдау.
  • BeanFactory немесе ApplicationContext пайдаланып, бинді алу және содан кейін ішіндегі логиканы өзгерту (мысалы, стратегия паттерн арқылы).
  • ConfigurableApplicationContext пайдалану және refresh() әдістерін қолдану, бірақ бұл күрделі және сирек қолданылатын тәсіл.
  • Орында өзгерте алатын прокси-объектілерді енгізу.

Динамикалық мінез-құлықты ауыстыру үшін прокси мысалы:

public interface Service {
    void execute();
}

public class ServiceImpl1 implements Service {
    public void execute() { System.out.println("Impl1"); }
}

public class ServiceImpl2 implements Service {
    public void execute() { System.out.println("Impl2"); }
}

public class ServiceProxy implements Service {
    private Service delegate;

    public ServiceProxy(Service initial) {
        this.delegate = initial;
    }

    public void setDelegate(Service delegate) {
        this.delegate = delegate;
    }

    public void execute() {
        delegate.execute();
    }
}

Осылайша, ServiceProxy бині өзгермейді, бірақ оның ішкі жүзеге асыруы динамикалық түрде өзгеруі мүмкін.