Я определяю условия, которые позже проверю для динамической загрузки одной из двух реализаций моего интерфейса службы.
@Component
public class IsPolicyEnabled implements Condition {
@Autowired
private MyProperties props;
@Override
public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) {
return props.isPolicyEnabled();
}
}
А
@Component
public class MyProperties {...}
И
@Service
@Conditional(IsPolicyEnabled.class)
public class ServiceA implements Service {...}
Тем не менее, я сталкиваюсь с ошибкой во время выполнения, как.
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.NullPointerException
at com.xyz.utils.IsPolicyEnabled.matches(IsPolicyEnabled.java:9)
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:88)
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:71)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isConditionMatch(ClassPathScanningCandidateComponentProvider.java:515)
По сути, ему не удалось инициализировать объект props, который был автоматически подключен внутри реализации условия. Разве это не разрешено?
Как я могу автоматически связать другую зависимость внутри реализации условия, так как моя оценка состояния зависит от значения, предоставленного этой зависимостью?