Проблема:< /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!");
}
}
}
< 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 и его зависимости должны быть созданы.
Тем не менее, когда я смотрю на все «новые» вызовы, я предполагаю, что смогу сделать это с помощью 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
Мобильная версия