Подтвердить что ты не робот

Intellij неверно говорит, что не существует beans типа, найденного для автоукрепленного репозитория

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

Нет beans?

enter image description here

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

enter image description here

4b9b3361

Ответ 1

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

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

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

Всегда помни...

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

Ответ 2

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

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

@Repository
public interface YourRepository ...
...

Если вы используете Spring Data с расширением класса Repository, это будут конфликты pagkages. Затем вы должны указать pickages.

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

Ответ 3

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

enter image description here

Ответ 4

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

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

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

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

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

Ответ 5

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

enter image description here

Ответ 6

Я использую Spring-Boot 2.0 и Intellij 2018.1.1 Ultimate Edition, и я столкнулся с той же проблемой.

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

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

Ответ 7

Ввод @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");
    }
}

Ответ 8

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

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

введите описание изображения здесь

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

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

Поскольку ваш пакет AppConfiguraion.java глубже, чем ваш компонент компонента аннотации (@Service, @Component...),

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

Ответ 12

У меня была аналогичная проблема в моем приложении. Когда я добавил аннотации, неправильный highliting dissapeared.

@ContextConfiguration(classes = {...})

Ответ 13

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

@SuppressWarnings("SpringJavaAutowiringInspection")

Ответ 14

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

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

Ответ 15

Проверьте, не пропустили ли вы аннотацию @Service в своем классе обслуживания, это было именно для меня.

Ответ 16

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

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

Ответ 17

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

@ComponentScan
public class PriceWatchTest{

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

Ответ 18

Мне просто нужно было использовать @EnableAutoConfiguration для решения этой проблемы, однако эта ошибка не имела никакого функционального влияния.

Ответ 19

Это можно решить, поместив @EnableAutoConfiguration в основной класс приложения весенней загрузки.

Ответ 20

Для меня решение состояло в том, чтобы поместить @EnableAutoConfiguration в класс Application под @SpringBootApplication будет подчеркивать, потому что он избыточен. Удалите его и вуаля все ваши предупреждения о пропавших бобов исчезли! Глупая spring...

Ответ 21

в моем случае, каталог, который я пытался @Autowired, был не на том же уровне,

после настройки на том же уровне структуры ошибка исчезла

надеюсь, что это может помочь кому-то!

Ответ 22

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

(доступ через меню структуры проекта или окно инструмента spring... edit "Spring Контекст приложения" )

Итак, вместо SpringApplicationContext, который просто содержит мою конфигурацию ExampleApplication spring, он также содержит отсутствующий Bean:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

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

Ответ 23

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

import org.jvnet.hk2.annotations.Service

вместо

import org.springframework.stereotype.Service

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

Ответ 24

Удивительно, но ориентированный на Feign проект, который успешно работал с Eclipse, не мог работать в InteliJ. Когда приложение запустилось, InteliJ пожаловался на клиента Feign, который я пытался внедрить в слой serviceImpl, сказав: поле personRestClient (мой клиент Feign) в... требуется компонент типа... который не может быть найден. Попробуйте определить bean-компонент типа "...." в вашей конфигурации.

Я потратил много времени, пытаясь понять, что не так. Я нашел решение (для InteliJ), которое я не совсем понимаю:

  1. Alt Shift F10 (или запустить меню)
  2. Выберите "Изменить конфигурацию"
  3. В окне конфигурации установите флажок "включать зависимости с" предоставленной "областью действия".
  4. Запустите ваше приложение

Или выберите Затмение :)

Ответ 25

Проверьте правильность написания пакета вашего компонента

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}

Ответ 26

Используйте @AutoConfigureMockMvc для тестового класса.

Ответ 27

Настройте контекст приложения, и все будет хорошо.

enter image description here

Ответ 28

Я решил проблему, установив плагин mybatis в IDEA. Когда я установил Mybatis Plugin, он исчез.

Ответ 29

В моем случае я изменил @Autowired на @Resource ,, а неправильные подсказки просто исчезли

Ответ 30

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

  • Файл → Структура проекта
  • Выберите Facets
  • Удалить Spring

Удачи!