Я думаю, что вы делаете это неправильно.
Вы должны использовать @Conditional()
в своей реализации, а не в интерфейсе.
Вот как я бы это сделал:
Интерфейс, который вы будете использовать в своем коде.
MyInterface.java
public interface MyInterface {
void myMethod();
}
Первая реализация:
MyInterfaceImplOne.java
@Bean
@Conditional(MyInterfaceImplOneCondition.class)
public class MyInterfaceImplOne implements MyInterface {
void myMethod(){
// dosmthg
}
}
MyInterfaceImplOneCondition.java
public class MyInterfaceImplOneCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("optionEnabled")
}
}
И для 2-й реализации:
MyInterfaceImplTwo.java
@Bean
@Conditional(MyInterfaceImplTwoCondition.class)
public class MyInterfaceImplTwo implements MyInterface {
void myMethod(){
// dosmthg 2
}
}
MyInterfaceImplTwoCondition.java
public class MyInterfaceImplTwoCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return !context.getEnvironment().getProperty("optionEnabled")
}
}
InВ этом случае вам просто нужно вызвать интерфейс, и Spring введет компонент, соответствующий нужному условию.
Надеюсь, это то, что вы ищете, и я достаточно ясно!