Как создать экземпляр определенных bean-компонентов условно на основе аргумента Java-программы?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как создать экземпляр определенных bean-компонентов условно на основе аргумента Java-программы?

Сообщение Anonymous »

Заголовок: Как создать экземпляры определенных bean-компонентов условно на основе свойства Spring Boot?

Проблема:< /strong>
В моем приложении Spring Boot есть класс обслуживания, которому необходимо создавать экземпляры различных компонентов (или bean-компонентов) на основе настроенного свойства, такого как режим..

p>
Вот текущая структура моего сервиса класс:

Код: Выделить всё

@Service
public class EngineService {

private final EngineArguments engineArguments;
private final EngineConfig engineConfig;

public EngineService(EngineArguments engineArguments, EngineConfig engineConfig) {
this.engineArguments = engineArguments;
this.engineConfig = engineConfig;
}

@PostConstruct
public void execute() {
if ("MODE_A".equals(engineArguments.getMode())) {
ModeAEngine modeAEngine = ModeAEngineInitializer.createEngine(engineArguments, engineConfig);
modeAEngine.execute();
} else if ("MODE_B".equals(engineArguments.getMode())) {
ModeBEngine modeBEngine = ModeBEngineInitializer.createEngine(engineArguments, engineConfig);
modeBEngine.execute();
} else {
throw new IllegalStateException("No valid engine found!");
}
}
}
Классы ModeAEngineInitializer и ModeBEngineInitializer возвращают экземпляры ModeAEngine или ModeBEngine соответственно.
< hr />
Проблема:
Инициализация этих компонентов включает в себя многократное создание экземпляров с использованием new, как показано ниже. Эти зависимости основаны на общих объектах EngineArguments и EngineConfig.

ModeAEngineInitializer.java

Код: Выделить всё

public class ModeAEngineInitializer {

public static ModeAEngine createEngine(EngineArguments engineArguments, EngineConfig engineConfig) {
DependencyA dependencyA = new DependencyA(engineArguments);
DependencyB dependencyB = new DependencyB(engineConfig);
HelperService helperService = new HelperService(dependencyA, dependencyB);

return new ModeAEngine(dependencyA, helperService);
}
}

ModeBEngineInitializer.java

Код: Выделить всё

public class ModeBEngineInitializer {

public static ModeBEngine createEngine(EngineArguments engineArguments, EngineConfig engineConfig) {
DependencyX dependencyX = new DependencyX(engineArguments);
DependencyY dependencyY = new DependencyY(engineConfig);
ProcessorService processorService = new ProcessorService(dependencyX, dependencyY);

return new ModeBEngine(dependencyX, processorService);
}
}
Последняя проблема:
В настоящее время ModeAEngineInitializer и Классы ModeBEngineInitializer содержат несколько экземпляров с использованием new. Я хочу заменить их компонентами Spring, чтобы на основе значения режима свойства создавались только необходимые зависимости и механизмы.
Для пример:
  • Если mode=MODE_A, то следует создать только ModeAEngine и его зависимости.
  • Если mode=MODE_B, то только ModeBEngine и его зависимости должны быть созданы.
Сейчас у меня есть класс, который отвечает за получение аргумента --engine и определение того, должен ли он запускать ModeA или ModeB.
Тем не менее, когда я смотрю на все «новые» вызовы, я предполагаю, что смогу сделать это с помощью Conditional. Что я и делал в прошлом. Однако при этом я не смог внедрить свой объект, содержащий аргумент --engine, в средство проверки условий.
https://www.baeldung.com/spring-conditional-annotations< /p>
Я попытался сделать это с помощью свойств, но при просмотре внутри объекта контекста не было найдено никакого значения движка. Я зарегистрировал объект контекста.
https://www.baeldung.com/spring-conditionalonproperty
Как настроить Spring Boot для создания экземпляра определенного bean-компоненты условно на основе значения аргумента ?

Подробнее здесь: https://stackoverflow.com/questions/792 ... m-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»