Передача параметров в пользовательские условия - PullRequest
2 голосов
/ 19 июня 2019

Я бы хотел сделать что-то вроде следующего для условной загрузки бина:

@Conditional(OnAuthoritieCondition.class, "SOME_INPUT_STRING")

Однако, когда я пытаюсь реализовать это, я получаю следующее:

public class OnAuthoritieCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}

Теперь мой вопрос: как мне реализовать пользовательское условие, которое принимает параметры, или есть лучший способ сделать то, что я хочу?

1 Ответ

2 голосов
/ 19 июня 2019

создайте свою собственную аннотацию

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.context.annotation.Conditional;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Conditional(value = CustomCondition.class)
public @interface ConditionalController {

  String condition();

}

ваше пользовательское условие

public class CustomCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
      Map<String, Object> attributes = metadata.getAnnotationAttributes(ConditionalController.class.getName());
      String condition = (String) attributes.get("condition");
      return "GO".equalsIgnoreCase(condition);
    }

}

используйте его как

@ConditionalController(condition = "GO")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...