intellij неправильно говорит, что для репозитория autowired не найдено бобов типа



Я создал простой модульный тест, но IntelliJ неправильно выделяет его красным цветом. пометив его как ошибку



нет фасоли?



enter image description here



Как вы можете видеть ниже, он проходит тест? Поэтому он должен быть подгружен?



enter image description here

1535   19  

19 ответов:

у меня была такая же проблема при создании Spring Boot применение с помощью их @SpringBootApplication Примечание. Эта аннотация представляет @Configuration,@EnableAutoConfiguration и @ComponentScan по словам весна ссылка.

как и ожидалось, новая аннотация работала правильно, и мое приложение работало гладко, но,Intellij продолжал жаловаться на несбывшиеся @Autowire зависимостей. Как только я вернулся к использованию @Configuration,@EnableAutoConfiguration и @ComponentScan по отдельности, ошибки прекратились. Кажется Intellij 14.0.3 (и, скорее всего, более ранние версии тоже) еще не настроен для распознавания @SpringBootApplication Примечание.

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

всегда помните...

человек всегда больше, чем машина.

добавить весеннюю аннотацию @Repository над классом репозитория.

Я знаю, что он должен работать без этой аннотации. Но если вы добавите это, IntelliJ не покажет ошибку.

@Repository
public interface YourRepository ...
...

если вы используете весенние данные с расширением Repository класс это будет конфликт страниц. Тогда вы должны указать явность pagkages.

import org.springframework.data.repository.Repository;
...

@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
    ...
}

и далее вы можете автоматически подключать свой репозиторий без ошибок.

@Autowired
YourRepository yourRepository;

это, вероятно, не очень хорошее решение (я думаю, вы пытаемся зарегистрировать репозиторий дважды). Но работайте на меня и не показывайте ошибок.

возможно в новой версии IntelliJ можно исправить:https://youtrack.jetbrains.com/issue/IDEA-137023

моя версия IntelliJ IDEA Ultimate (2016.3.4 Build 163), похоже, поддерживает это. Хитрость заключается в том, что вам нужно включить плагин Spring Data.

enter image description here

Я всегда решаю эту проблему, делая де следующие.. Настройки>Проверки>Пружинное Ядро>Код чем вы переходите от ошибки к предупреждению параметра серьезности

enter image description here

Я использую spring-boot 2.0, и intellij 2018.1.1 ultimate edition, и я столкнулся с той же проблемой.

Я решил, поместив @EnableAutoConfiguration в основной класс приложения

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

иногда требуется указать, где @ComponentScan должен сканировать компоненты. Вы можете сделать это, передав пакеты в качестве параметра этой аннотации, например:

@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})

однако, как уже упоминалось, аннотация @SpringBootApplication заменяет @ComponentScan, поэтому в таких случаях вы должны сделать то же самое:

@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})

по крайней мере, в моем случае, Intellij перестал жаловаться.

Если вы не хотите вносить какие-либо изменения в свой код, просто чтобы сделать вашу IDE счастливой. Я решил ее, добавив Все компоненты к весенней грани.

  1. создайте группу с именем "сервис, процессоры и маршрутизаторы" или любым другим именем;
  2. удалить и воссоздать "контекст приложения Spring" используйте группу, созданную ранее в качестве родителя.

enter image description here

пока ваши тесты проходят Вы хороши, хит alt + enter при наведении курсора на ошибку и внутри подменю первого элемента вы найдете Disable Inspection выберите

положить @Component или @configuration в вашем файле конфигурации bean, похоже, работает, т. е. что-то вроде:

@Configuration
public class MyApplicationContext {
    @Bean
    public DirectoryScanner scanner() {
        return new WatchServiceDirectoryScanner("/tmp/myDir");
    }
}

@Component
public class MyApplicationContext {
    @Bean
    public DirectoryScanner scanner() {
        return new WatchServiceDirectoryScanner("/tmp/myDir");
    }
}

и еще одна важная информация-добавить ComponentScan Так что приложение знает о вещах, которые ему нужно подключить. Это не имеет отношения к данному вопросу. Однако если нет @autowiring выполняется вообще, то это, вероятно, ваше решение.

@Configuration
@ComponentScan(basePackages = {
    "some_package",
})
public class someService {

что вам нужно сделать, это добавить

@ComponentScan("package/include/your/annotation/component") на AppConfiguration.java.

так как я думаю, что ваш AppConfiguraion.java's пакет глубокий чем ваш компонент аннотации (@Service, @Component...)'пакет с

например "package/include/your/annotation/component/deeper/config".

У меня была похожая проблема в моем приложении. Когда я добавил аннотации неправильное выделение исчезло.

@ContextConfiguration(classes = {...})

у меня была аналогичная проблема в приложении Spring Boot. Приложение использует имитацию (HTTP-клиент, синтезирующий запросы из аннотированных интерфейсов). Имея интерфейс SomeClient аннотируется @FeignClient, Feign генерирует прокси-класс среды выполнения, реализующий этот интерфейс. Когда какой-то компонент Spring пытается autowire bean типа SomeClient, идея не жалуется на Боб типа SomeClient найдено так как никакого реального класса на самом деле не существует в проекте и идея не учат понимать @FeignClient Аннотация В каких путь.

решение: комментировать интерфейс SomeClient с @Component. (В нашем случае, мы не используем @FeignClient аннотации SomeClient непосредственно, мы скорее используем metaannotation @OurProjectFeignClient который аннотируется @FeignClient и добавить @Component аннотация к нему также работает.)

похоже, это все еще ошибка в последней версии IntelliJ и связано с возможной проблемой кэширования?

Если вы добавляете аннотацию @Repository как mk321, упомянутую выше, сохраните, затем удалите аннотацию и сохраните снова, это устраняет проблему.

Я использую эту аннотацию, чтобы скрыть эту ошибку, когда она появляется в IntelliJ V. 14:

@SuppressWarnings("SpringJavaAutowiringInspection")

все, что вам нужно сделать, чтобы сделать эту работу является следующий код:

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}

мое решение этой проблемы в моем приложении spring boot состояло в том, чтобы открыть контекст приложения spring и добавить класс для отсутствующего autowired bean вручную!

(доступ через меню структура проекта или окно инструментов весна... редактировать "весенний контекст приложения")

поэтому вместо SpringApplicationContext, содержащего только мою конфигурацию exampleapplication spring, он также содержит отсутствующие Боб:

SpringApplicationContext:

  • рассмотрим пример приложения.java
  • MissingBeanClass.java

et voilà: сообщение об ошибке исчезло!

иногда - в моем случае это-причина неправильного импорта. Я случайно импортировал

import org.jvnet.hk2.annotations.Service

вместо

import org.springframework.stereotype.Service

слепо принимая первый выбор в предложенном импорте идеи. Мне потребовалось несколько минут, когда это случилось в первый раз: -)

Я тоже столкнулся с этой проблемой и решил ее с помощью удаления Spring Facet:

  • Файл - > Структура Проекта
  • выберите Facets
  • Удалить Весной.

удачи!

Comments

    Ничего не найдено.