Ответ 1
У меня была та же проблема с IntelliJ IDEA 13.1.4 Я решил это, удалив фасет Spring (Файл- > Структура проекта) и оставив ее просто показ "Обнаружение".
IntelliJ IDEA показывает ошибки, когда я использую аннотацию Spring @Autowired
в классе, но класс работает без каких-либо проблем.
Вот сообщение об ошибке:
Авторизованные члены должны быть определены в действительном spring bean (@Компонент/@Сервис и т.д.) меньше... (Ctrl + F1) Проверяет автоподключение проблемы в классе bean.
У меня была та же проблема с IntelliJ IDEA 13.1.4 Я решил это, удалив фасет Spring (Файл- > Структура проекта) и оставив ее просто показ "Обнаружение".
Если вы знаете, что существует bean и его просто проблема проверок, просто добавьте следующее перед объявлением переменной:
@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;
Иногда IntelliJ не может разрешить, если объявлен bean, например, когда bean включен условно и разрешение условия происходит во время выполнения.
Здесь есть такая же ошибка!
Кажется, Intellij не может проверить, является ли реализация класса @Service или @Component.
Решите, просто перейдя с "Ошибка на предупреждение" (нажав Alt + Enter).
Удалите файл .iml из всего вашего модуля проекта, а затем перейдите в Файл → Недействительный кэш/Перезапуск
Я исправил это, добавив предупреждение о подавлении давления:
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private ....
Файл → ProjectStructure → Модули → + (в центральной колонке) → Spring → OK
У меня была та же проблема. Я решил это, добавив фасет Spring (Файл- > Структура проекта) для каждого соответствующего модуля, а затем добавьте файлы конфигурации. Для некоторых проектов (spring mvc) файлы конфигурации, которые обнаруживаются автоматически. Однако для проекта jar мне пришлось добавить файлы конфигурации вручную.
Убедитесь, что ваши определения Spring bean верны. Иногда приложение работает нормально, оно просто отображает ошибку в среде IDE, проверяет файл iml проекта, если у вас есть грань Spring.
Решил проблему, выбрав Файл >> Структура проекта >> Фасеты, а затем добавив все файлы конфигурации в Spring Facet. После этого он начал обнаруживать файлы, в которых находятся компоненты, и смог решить проблему. IntelliJ дает эту проверку довольно ценно, и IMHO не должен быть отключен.
Убедитесь, что ваша IntelliJ Idea (IDE) осведомлена обо всех необходимых конфигурациях spring, с которыми проверяется ваш модуль.
Вы можете проверить это под
Файл > Структура проектa > Модули > [название вашего проекта на правой панели] > spring
Иногда нам нужно явно указать среде IDE, что конфигурация spring исходит из зависимости (банку, присутствующей в пути к пути к проекту)
У меня такая же проблема. Моя была потому, что bean, содержащая автоуровневую ссылку, не был компонентом Spring (это был EJB), но получил перехватчик SpringBeanAutowiringInterceptor, позволяющий использовать автоувеличивание. Я думаю, Intellij не использует эту возможность в своей проверке Autowiring.
У меня тоже была эта проблема. Выполняя alt + enter, а затем попросив либо повторно запустить, либо отключить проверку Spring на исправленной линии, исправленной. Похоже, что это стало проблемой после обновления 13.4.
Кажется, что проблема видимости - родительский контроллер не видит компонент, который вы пытаетесь подключить.
Попробуйте добавить
@ComponentScan("path to respective Component")
к родительскому контроллеру.
в моем случае мне не хватало писать в 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 появится в левом поле:
Mine для того, чтобы не добавлять @Repository в мой интерфейс CrudRepository, учебник, который я наблюдал, не добавлял его в STS, и он не жаловался.
Вы должны проверить, есть ли @Component, @Repository или аналогичные добавленные в классе
Я решил, что добавление веб-грани.
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 {
Я решил эту проблему таким образом. В IntelliJ все ваши пакеты должны быть в подпакете, который является подпакетом main/java. Например, я поместил все свои пакеты в src/main/java/com.misisol.watchStore/, и Spring мог найти мои бобы затем после.
Inject Bean с @Qualifier решили проблему для меня.
У меня была похожая проблема. Я решил эту проблему, сняв флажок "Обрабатывать явно аннотированные компоненты" (см. скриншот ниже). Эта опция включена по умолчанию в Linux. Теперь аннотации @Service и @Configurations видны. скриншот
немного поздно, но я надеюсь, что это поможет кому-то еще.
Обязательно поместите @Service в класс реализации для службы
@Service
public class ServiceNameImpl implements ServiceName {
@Override
public void method(ObjectType paramName) {
//CODE
}
}
Вот как я исправил ошибку.
Я знаю, что это старый вопрос, но я не нашел ни одного ответа, который бы решил эту проблему для меня, поэтому я предоставлю свое решение.
Примечание. Возможно, проблема заключалась в этом, но моя проблема не была связана с двойной реализацией одного и того же интерфейса. Использование @Qualitier
заставило мою проблему исчезнуть, но это была повязка, а не правильное решение, поэтому я не согласился с этим.
ПРЕДПОСЫЛКИ
Мне поручено поддерживать старый проект, который прошел через разные версии Spring и обновлялся только для отдельных модулей, так что, по меньшей мере, вещи нуждались в рефакторинге. Первоначально я получил проблему с дублирующимся компонентом, и перестройка изменила проблему между проблемой OP и проблемой с дублированным компонентом, даже если был только один компонент; переход к дублирующим компонентам всегда проходил в одном классе.
ВОПРОС
Эта проблема присутствовала в классе @Repository
, который был @Autowired
в классе @Service
, который также имел аннотацию @ComponentScan
. Я заметил, что у меня также была пружина application-config.xml
, которая выполняла context:component-scan
на базовом пакете, который, как мне кажется, был оригинальным подходом в старых версиях Spring. Я находился в процессе создания новой ветки, используя части старой ветки и новой ветки в проекте поддержки, который использовался в различных проектах, которые разрабатывались в течение нескольких лет, и поэтому было такое сочетание и сопоставление. методологий.
ПРОСТОЕ РЕШЕНИЕ
Поскольку более современный подход к использованию @ComponentScan
уже был реализован, я просто удалил application-config.xml
, и проблема была решена.