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

IntelliJ IDEA показывает ошибки при использовании Spring @Автоматическая аннотация

IntelliJ IDEA показывает ошибки, когда я использую аннотацию Spring @Autowired в классе, но класс работает без каких-либо проблем.

Вот сообщение об ошибке:

Авторизованные члены должны быть определены в действительном spring bean (@Компонент/@Сервис и т.д.) меньше... (Ctrl + F1) Проверяет автоподключение проблемы в классе bean.

4b9b3361

Ответ 1

У меня была та же проблема с IntelliJ IDEA 13.1.4 Я решил это, удалив фасет Spring (Файл- > Структура проекта) и оставив ее просто показ "Обнаружение".

Ответ 2

Если вы знаете, что существует bean и его просто проблема проверок, просто добавьте следующее перед объявлением переменной:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

Иногда IntelliJ не может разрешить, если объявлен bean, например, когда bean включен условно и разрешение условия происходит во время выполнения.

Ответ 3

Здесь есть такая же ошибка!

Кажется, Intellij не может проверить, является ли реализация класса @Service или @Component.

Решите, просто перейдя с "Ошибка на предупреждение" (нажав Alt + Enter).

Ответ 4

Удалите файл .iml из всего вашего модуля проекта, а затем перейдите в Файл → Недействительный кэш/Перезапуск

Ответ 5

Я исправил это, добавив предупреждение о подавлении давления:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....

Ответ 6

Файл → ProjectStructure → Модули → + (в центральной колонке) → Spring → OK

Ответ 7

У меня была та же проблема. Я решил это, добавив фасет Spring (Файл- > Структура проекта) для каждого соответствующего модуля, а затем добавьте файлы конфигурации. Для некоторых проектов (spring mvc) файлы конфигурации, которые обнаруживаются автоматически. Однако для проекта jar мне пришлось добавить файлы конфигурации вручную.

Ответ 8

Убедитесь, что ваши определения Spring bean верны. Иногда приложение работает нормально, оно просто отображает ошибку в среде IDE, проверяет файл iml проекта, если у вас есть грань Spring.

Ответ 9

Решил проблему, выбрав Файл >> Структура проекта >> Фасеты, а затем добавив все файлы конфигурации в Spring Facet. После этого он начал обнаруживать файлы, в которых находятся компоненты, и смог решить проблему. IntelliJ дает эту проверку довольно ценно, и IMHO не должен быть отключен.

Ответ 10

Убедитесь, что ваша IntelliJ Idea (IDE) осведомлена обо всех необходимых конфигурациях spring, с которыми проверяется ваш модуль.

Вы можете проверить это под

Файл > Структура проектa > Модули > [название вашего проекта на правой панели] > spring

Иногда нам нужно явно указать среде IDE, что конфигурация spring исходит из зависимости (банку, присутствующей в пути к пути к проекту)

Ответ 11

У меня такая же проблема. Моя была потому, что bean, содержащая автоуровневую ссылку, не был компонентом Spring (это был EJB), но получил перехватчик SpringBeanAutowiringInterceptor, позволяющий использовать автоувеличивание. Я думаю, Intellij не использует эту возможность в своей проверке Autowiring.

Ответ 12

У меня тоже была эта проблема. Выполняя alt + enter, а затем попросив либо повторно запустить, либо отключить проверку Spring на исправленной линии, исправленной. Похоже, что это стало проблемой после обновления 13.4.

Ответ 13

Кажется, что проблема видимости - родительский контроллер не видит компонент, который вы пытаетесь подключить.

Попробуйте добавить

@ComponentScan("path to respective Component") 

к родительскому контроллеру.

Ответ 14

в моем случае мне не хватало писать в web.xml:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

и в файле контекста приложения:

<context:component-scan base-package=[your package name] />

после добавления этих тегов и запуска maven для восстановления проекта, автообновленная ошибка в intellj desapears и значок bean появится в левом поле: введите описание изображения здесь

Ответ 15

Mine для того, чтобы не добавлять @Repository в мой интерфейс CrudRepository, учебник, который я наблюдал, не добавлял его в STS, и он не жаловался.

Ответ 16

Вы должны проверить, есть ли @Component, @Repository или аналогичные добавленные в классе

Ответ 17

Я решил, что добавление веб-грани.

Ответ 18

eg1:
director:Settings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {

Ответ 19

Я решил эту проблему таким образом. В IntelliJ все ваши пакеты должны быть в подпакете, который является подпакетом main/java. Например, я поместил все свои пакеты в src/main/java/com.misisol.watchStore/, и Spring мог найти мои бобы затем после.

Ответ 20

Inject Bean с @Qualifier решили проблему для меня.

Ответ 21

У меня была похожая проблема. Я решил эту проблему, сняв флажок "Обрабатывать явно аннотированные компоненты" (см. скриншот ниже). Эта опция включена по умолчанию в Linux. Теперь аннотации @Service и @Configurations видны. скриншот

Ответ 22

немного поздно, но я надеюсь, что это поможет кому-то еще.

Обязательно поместите @Service в класс реализации для службы

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

Вот как я исправил ошибку.

Ответ 23

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

Примечание. Возможно, проблема заключалась в этом, но моя проблема не была связана с двойной реализацией одного и того же интерфейса. Использование @Qualitier заставило мою проблему исчезнуть, но это была повязка, а не правильное решение, поэтому я не согласился с этим.

ПРЕДПОСЫЛКИ

Мне поручено поддерживать старый проект, который прошел через разные версии Spring и обновлялся только для отдельных модулей, так что, по меньшей мере, вещи нуждались в рефакторинге. Первоначально я получил проблему с дублирующимся компонентом, и перестройка изменила проблему между проблемой OP и проблемой с дублированным компонентом, даже если был только один компонент; переход к дублирующим компонентам всегда проходил в одном классе.

ВОПРОС

Эта проблема присутствовала в классе @Repository, который был @Autowired в классе @Service, который также имел аннотацию @ComponentScan. Я заметил, что у меня также была пружина application-config.xml, которая выполняла context:component-scan на базовом пакете, который, как мне кажется, был оригинальным подходом в старых версиях Spring. Я находился в процессе создания новой ветки, используя части старой ветки и новой ветки в проекте поддержки, который использовался в различных проектах, которые разрабатывались в течение нескольких лет, и поэтому было такое сочетание и сопоставление. методологий.

ПРОСТОЕ РЕШЕНИЕ

Поскольку более современный подход к использованию @ComponentScan уже был реализован, я просто удалил application-config.xml, и проблема была решена.