Я разрабатываю новую функцию, которая должна быть скрыта за FeatureToggleX
.Как часть этого, мне нужно добавить новую зависимость b
к моему SomeClass
:
class SomeClass {
private OldDependency a;
private NewDependency b;
@Autowired
public SomeClass(OldDependency a, NewDependency b) {
this.a = a;
this.b = b;
}
}
Я использую пользовательскую аннотацию IfActive
в качестве Conditional
, которая служит TheToggledDependency
, если итолько если FeatureToggleX
активен:
@Component
@IfActive("FeatureToggleX")
class TheToggledDependency implements NewDependency {
}
Как сделать пружину временно подключенной b = null
, когда FeatureToggleX
выключен?
Есть липростой способ подключить универсальное решение к процессу проводки Spring, который обнаруживает IfActive
компоненты и расходные материалы null
s на своих местах?
Как рекомендуется в других ответах, я рассмотрел @Autowired(required = false)
- возможно, в сочетании с перегрузкой конструктора SomeClass
- чтобы разрешить пропуск b
, но это побочный эффект, который также узаконивает пропуск a
, что должно быть ошибкой.
Я мог бы предоставить альтернативный макет IfInactive
вариант NewDependency
, но это наполнило бы мой проект бесполезными манекенами, которые мне нужно помнить, удаляя при удалении переключателя.
Точно так же я мог бы построить два варианта SomeClass
, одину него есть NewDependency
и секунда, о которой он совершенно не знает, и выбирайте между двумя в зависимости от переключателя.Однако это нецелесообразно для больших классов, поскольку дублирует другие незатронутые функции.