Рубрики
Без рубрики

Неудовлетворенная зависимость весной

Обзор наиболее распространенных причин для получения неудовлетвореннойзависимостиException, и как это исправить

Автор оригинала: baeldung.

1. Обзор

В этом быстром учебнике мы объясним, что весна НеудовлетвореннаяЗависимостьИсключаемость , что вызывает его, и как его избежать.

2. Причина неудовлетвореннойзависимостиИсключенность

НеудовлетвореннаяЗависимостьИсключенность получает бросили, когда, как следует из названия, некоторые фасоли или собственности зависимость не удовлетворена.

Это может произойти, когда приложение Spring попытается проволоки фасоли и не может решить один из обязательных зависимостей.

3. Пример применения

Предположим, у нас есть сервис-класс ПокупкаДептСервис , который зависит от ИнвентарьРепозиторий:

@Service
public class PurchaseDeptService {
    public PurchaseDeptService(InventoryRepository repository) {
        this.repository = repository;
    }
}
public interface InventoryRepository {
}
@Repository
public class ShoeRepository implements InventoryRepository {
}
@SpringBootApplication
public class SpringDependenciesExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDependenciesExampleApplication.class, args);
    }
}

На данный момент мы предположим, что все эти классы расположены в одном пакете под названием com.baeldung.dependency.exception.app .

Когда мы запускаем это приложение Spring Boot, все работает нормально. Давайте посмотрим, какие проблемы мы можем запустить, если мы пропустим шаг конфигурации.

4. Отсутствует аннотация компонента

Теперь, давайте удалим @Repository аннотация от нашего ОбувьРепозиторий класс:

public class ShoeRepository implements InventoryRepository {
}

Когда мы за начинаем наше приложение снова, мы увидим следующее сообщение об ошибке: НеудовлетвореннаяЗависимостьException: Ошибка создания фасоли с именем ‘purchaseDeptService’: Неудовлетворенная зависимость, выраженная через параметр конструктора 0

Весна не было поручено проволоки ОбувьРепозиторий фасоли и добавить его в контекст приложения, следовательно, не мог придать его и бросил исключение.

Добавление @Repository аннотация обратно на ОбувьРепозиторий решает проблему.

5. Пакет не сканируется

Давайте теперь ставим наши ОбувьРепозиторий (наряду с ИнвентарьРеспозиторий ) в отдельный пакет под названием com.baeldung.dependency.exception.repository.

Еще раз, когда мы запускаем наше приложение, оно бросает НеудовлетвореннаяЗависимостьИсключаемость . Чтобы решить эту проблему, мы можем настроить сканирование пакета на родительском пакете и убедиться, что все соответствующие классы включены:

@SpringBootApplication
@ComponentScan(basePackages = {"com.baeldung.dependency.exception"})
public class SpringDependenciesExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDependenciesExampleApplication.class, args);
    }
}

6. Неуя уникальный разрешение зависимости

Предположим, мы добавим еще ИнвентарьРеспозиторий реализация – ПлатьеРепозиторий :

@Repository
public class DressRepository implements InventoryRepository {
}

Теперь, когда мы запускаем наше приложение, оно снова бросит НеудовлетвореннаяЗависимостьException.

Однако на этот раз ситуация иная. Как это происходит, зависимость не может быть решена, когда есть более чем одна фасоль, которая удовлетворяет .

Чтобы решить эту проблему, мы можем добавить @Qualifier различать репозитории:

@Qualifier("dresses")
@Repository
public class DressRepository implements InventoryRepository {
}
@Qualifier("shoes")
@Repository
public class ShoeRepository implements InventoryRepository {
}

Кроме того, мы должны добавить квалификатор к ПокупкаДептСервис зависимость конструктора:

public PurchaseDeptService(@Qualifier("dresses") InventoryRepository repository) {
    this.repository = repository;
}

Это сделает ПлатьеРепозиторий единственный жизнеспособный вариант, и весна будет вводить его в ПокупкаДептСервис.

7. Заключение

В этой статье мы видели несколько наиболее распространенных случаев столкновения с НеудовлетвореннаяЗависимостьException. Кроме того, мы научились решать эти проблемы.

Вы также можете посмотреть на более общий учебник по Весна BeanCreationException .

Код, представленный здесь, можно найти более на GitHub .