У меня есть две реализации интерфейса IFoo
: Foo1
и Foo2
.
Мне нужен контекст, чтобы иметь возможность вставлять правильный для любого класса, который хочет IFoo
без того, чтобы этот класс не знал, какую реализацию он собирается получить (поэтому не нужно использовать @Qualifier
).
Пример использования:
class Bar {
@Autowired IFoo foo;
}
У меня есть класс FactoryBean<IFoo>
, в котором есть логика, которую нужно вернуть.
Проблема в том, что я также хочу, чтобы эти два имплиса прошли через МОК, потому что они сами имеют зависимости.
public class FooFactory implements FactoryBean<Foo> {
@Autowired Foo1 foo1;
@Autowired Foo2 foo2;
@Override
public IFoo getObject() throws Exception {
if(someLogic()){
return foo1;
}
return foo2;
}
}
Если я отправлю их на завод, я получу исключение
"No unique bean of type IFoo is defined: expected single matching bean but found 3: [fooFactory, foo1, foo2]"
Есть ли какой-нибудь способ сказать Spring, что нужно просто использовать fooFactory по умолчанию для всех остальных, но использовать две реализации внутри фабрики?