Для чего стоит
@Service
public class A {
@Autowired
List<Super> supers;
void process(String str) {
for(Super sup : supers) {
if(str.equals((sup.getClass().getAnnotation(Qualifier.class).value()))){
// executes when the bean qualifier name and str matches.
}
}
}
}
---- Еще одна попытка ----
Интерфейс
public interface Super {
String getQualifier();
}
Пример реализации
@Service
@Qualifier(BSuperImpl.QUALIFIER)
public class BSuperImpl implements Super {
static final String QUALIFIER = "B";
@Override
public String getQualifier() {
return QUALIFIER;
}
}
A
@Service
public class A {
@Autowired
Map<String,Super> supers;
void process(String str) {
System.out.println(supers);
for(String beanName : supers.keySet()) {
if(str.equals(supers.get(beanName).getQualifier())){
// execute the logic
}
}
}
}
Когда от контейнера требуется не bean-компонент, а не путем внедрения зависимостей, вам так или иначе потребуется ссылаться на контекст приложения.
При таком подходе использование @Qualifier не является обязательным. Использование map должно продемонстрировать возможность того, что beanName также может быть передано в качестве параметра методу.