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 бині өзгермейді, бірақ оның ішкі жүзеге асыруы динамикалық түрде өзгеруі мүмкін.