Код: Выделить всё
public interface IInterface {
void printIt();
}
Код: Выделить всё
@Component
public class ImplementationA implements IInterface {
@Override
public void printIt() {
System.out.println("Inside ImplementationA");
}
}
Код: Выделить всё
@Component
public class ImplementationB implements IInterface {
@Override
public void printIt() {
System.out.println("Inside ImplementationB");
}
}
Код: Выделить всё
@Component
@AllArgsConstructor
public class Listener {
IInterface iInterface;
public void doStuff(){
iInterface.printIt();
}
}
После некоторых исследований я начал использовать аннотацию @Conditional.
Я добавил два класса ConditionA.java и ConditionB. Java:
Код: Выделить всё
public class ConditionA implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return false;
}
}
Код: Выделить всё
public class ConditionB implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return true;
}
}
Код: Выделить всё
@Component
@Conditional(ConditionA.class)
public class ImplementationA implements IInterface {
@Override
public void printIt() {
System.out.println("Inside ImplementationA");
}
}
Код: Выделить всё
@Component
@Conditional(ConditionB.class)
public class ImplementationB implements IInterface {
@Override
public void printIt() {
System.out.println("Inside ImplementationA");
}
}
Однако в следующей части я столкнулся с проблемой:
Итак, в приведенном выше решении я жестко запрограммировал возврат true или возврат false из совпадений > метода соответствующего класса Condition. Что делать, если мне нужно вернуть динамическое значение на основе другого компонента.
Предположим, у меня есть класс MyCustomConfig Spring Component, который имеет член customFlag и если для этого члена установлено значение true, нам нужно внедрить ImplementationA.class.
Я попробовал следующее (создал класс @Component, а также автоматически подключил MyCustomConfig):
Код: Выделить всё
@Component
public class ConditionA implements Condition {
@Autowired
MyCustomConfig myCustomConfig;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return myCustomConfig.getCustomFlag();
}
}
Кто-нибудь может мне помочь с этим.
Подробнее здесь: https://stackoverflow.com/questions/733 ... tion-class