Исключение
Код: Выделить всё
Parameter 0 of constructor in
.RssStrategy required a single bean, but 11 were found:
Я видел решения, в которых для определения того, на какую реализацию ссылаться, использовался квалификатор, но в моем случае RssStrategy.java не знает, и решение принимает сервис, внедряющий стратегию.
RssStrategy.java
Код: Выделить всё
@Component
public class RssStrategy implements FetchDataStrategy{
private final T rssConsumer;
public RssStrategy(T rssConsumer) {
this.rssConsumer = rssConsumer;
}
@Override
public void fetchData() {
rssConsumer.consume();
}
}
Код: Выделить всё
@Component(value = "rssConsumerA")
public class RssConsumerA extends RssConsumer {
@Override
public void consume() {}
}
@Component(value = "rssConsumerB")
public class RssConsumerB extends RssConsumer {
@Override
public void consume() {}
}
Код: Выделить всё
@Service
public class ServiceA extends MyAbstractService {
public ServiceA ( RssStrategy fetchDataStrategy) {}
@Override
public void run() {fetchDataStrategy.fetchData()}
}
@Service
public class ServiceB extends MyAbstractService {
public ServiceB ( RssStrategy fetchDataStrategy) {}
@Override
public void run() {fetchDataStrategy.fetchData()}
}
Единственная альтернатива, которую я нашел на данный момент, — это вместо внедрения rssConsumer, я предоставляю его через установщик, например:
Код: Выделить всё
@Component
public class RssStrategy implements FetchDataStrategy{
private final T rssConsumer;
public setRssConsumer(T rssConsumer) {
this.rssConsumer = rssConsumer;
}
@Override
public void fetchData() {
rssConsumer.consume();
}
}
Код: Выделить всё
@Service
public class ServiceA extends MyAbstractService {
public ServiceA ( RssConsumerA, rssConsumerA,
RssStrategy fetchDataStrategy) {
fetchDataStrategy.setRssConsumer(rssConsumerA);
}
@Override
public void run() {fetchDataStrategy.fetchData()}
}
Похоже, что мое решение тоже не работает. Хотя я предоставляю rssConsumer через установщик:
Код: Выделить всё
fetchDataStrategy.setRssConsumer(rssConsumerA);
Подробнее здесь: https://stackoverflow.com/questions/764 ... pring-boot
Мобильная версия