Я создал простой модульный тест, но IntelliJ неправильно выделяет его красным. пометив это как ошибку
Нет бобов?
Как вы можете видеть ниже, он проходит тест? Так что это должно быть Autowired?
Я создал простой модульный тест, но IntelliJ неправильно выделяет его красным. пометив это как ошибку
Нет бобов?
Как вы можете видеть ниже, он проходит тест? Так что это должно быть Autowired?
Ответы:
У меня была такая же проблема при создании приложения Spring Boot с использованием их @SpringBootApplication
аннотации. Это примечание представляет @Configuration
, @EnableAutoConfiguration
и в @ComponentScan
соответствии с ссылкой пружинной .
Как и ожидалось, новая аннотация работала правильно, и мое приложение работало нормально, но Intellij продолжал жаловаться на невыполненные @Autowire
зависимости. Как только я вернулся к использованию @Configuration
, @EnableAutoConfiguration
и по @ComponentScan
отдельности ошибки прекратились. Похоже, что Intellij 14.0.3 (и, скорее всего, более ранние версии) еще не настроен на распознавание @SpringBootApplication
аннотации.
А пока, если ошибки вас так сильно беспокоят, вернитесь к этим трем отдельным аннотациям. В противном случае игнорируйте Intellij ... ваше разрешение зависимостей правильно настроено, поскольку ваш тест пройден .
Всегда помни...
Человек всегда больше машины.
@SpringBootApplication
я получил эту ошибку. Я следовал совету @ Jaõs Matos, используя scanBasePackages
параметр @SpringBootApplication
и указав пакет / пространства имен, которые следует сканировать.
Добавьте аннотацию Spring @Repository
над классом хранилища.
Я знаю, что это должно работать без этой аннотации. Но если вы добавите это, IntelliJ не покажет ошибку.
@Repository
public interface YourRepository ...
...
Если вы используете Spring Data с расширяющим 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.
Иногда вам необходимо указать, где @ComponentScan должен сканировать компоненты. Вы можете сделать это, передав пакеты в качестве параметра этой аннотации, например:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Однако, как уже упоминалось, аннотация @SpringBootApplication заменяет @ComponentScan, поэтому в таких случаях вы должны сделать то же самое:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
По крайней мере, в моем случае Intellij перестал жаловаться.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
и хотя приложение работало нормально, Intellij это не понравилось. Меняется на @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
исправленный для меня!
Я всегда решаю эту проблему, выполняя следующие действия: Настройки> Инспекции> Spring Core> Код, чем переход от ошибки к предупреждению о серьезности
Я использую Spring-Boot 2.0 и Intellij 2018.1.1 Ultimate Edition, и я столкнулся с той же проблемой.
Я решил, поместив @EnableAutoConfiguration в основной класс приложения
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Ввод @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");
}
}
Если вы не хотите вносить какие-либо изменения в свой код, просто чтобы порадовать IDE. Я решил это, добавив все компоненты к фасету Spring.
Пока ваши тесты проходят, вы в порядке, нажмите alt + enter
курсор на ошибку и в подменю первого элемента, который вы найдете, Disable Inspection
выберите, что
У меня была похожая проблема в приложении Spring Boot. Приложение использует Feign (запросы клиента HTTP-синтеза от аннотированных интерфейсов). После SomeClient
аннотирования интерфейса @FeignClient
Feign генерирует прокси-класс времени выполнения, реализующий этот интерфейс. Когда какой-либо компонент Spring пытается автоматически связать bean-компонент типа SomeClient
, Idea жалуется, что bean-компонент типа не SomeClient
найден, поскольку в проекте фактически не существует реального класса, и Idea не учат понимать@FeignClient
аннотацию каким-либо образом.
Решение: аннотировать интерфейс SomeClient
с @Component
. (В нашем случае мы не используем @FeignClient
аннотацию SomeClient
непосредственно, мы скорее используем метааннотацию, @OurProjectFeignClient
которая аннотирована, @FeignClient
и добавление @Component
аннотации к ней также работает.)
@Component
в интерфейс решает проблему. Но я думаю, что это не правильный путь ... На мой взгляд, это ошибка в IntelliJ IDEA или, что не так сложно, IntelliJ IDEA не готов к более новым версиям Feign. Он работает без более @Component
ранних симулированных версий (где вместо них @FeignClient
была аннотация - может быть, это является причиной проблемы?). Вы нашли какие-либо дополнительные детали (возможно, билет с ошибкой) для этого? org.springframework.cloud.netflix.feign
org.springframework.cloud.openfeign
@Component
) @FeignClient
из org.springframework.cloud.netflix.feign
) пакета.
И еще одна важная информация - добавьте, ComponentScan
чтобы приложение знало о том, что ему нужно подключить. Это не относится к данному вопросу. Однако, если не @autowiring
выполняется вообще, то это, вероятно, ваше решение.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Что вам нужно сделать, это добавить
@ComponentScan("package/include/your/annotation/component")
в AppConfiguration.java
.
Поскольку я думаю, что ваш AppConfiguraion.java
пакет глубже, чем пакет компонента аннотации (@Service, @Component ...),
такой как "package/include/your/annotation/component/deeper/config"
.
У меня была похожая проблема в моем приложении. При добавлении аннотации некорректная подсветка исчезла.
@ContextConfiguration(classes = {...})
Я использую эту аннотацию, чтобы скрыть эту ошибку, когда она появляется в IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Для меня решение заключалось в том, чтобы поместить его @EnableAutoConfiguration
в класс Application, @SpringBootApplication
чтобы он подчеркивал его, потому что он избыточен. Удалите его и вуаля все ваши предупреждения о пропавших бобов исчезли! Глупая весна ...
Мое решение этой проблемы в моем весеннем загрузочном приложении состояло в том, чтобы открыть контекст весеннего приложения и вручную добавить класс для отсутствующего автонастроенного компонента!
(доступ через меню «Структура проекта» или окно инструмента Spring ... редактировать «Контекст приложения Spring»)
Таким образом, вместо SpringApplicationContext, просто содержащего мою конфигурацию Spring для ExampleApplication, он также содержит отсутствующий компонент:
SpringApplicationContext:
et voilà: сообщение об ошибке исчезло!
Кажется, это все еще ошибка в последней версии IntelliJ и связана с возможной проблемой кэширования?
Если вы добавите аннотацию @Repository как mk321, упомянутую выше, сохраните, затем удалите аннотацию и сохраните снова, это решит проблему.
Мне просто нужно было использовать @EnableAutoConfiguration для решения этой проблемы, однако эта ошибка не имела никакого функционального влияния.
Это можно решить, поместив @EnableAutoConfiguration в основной класс приложения весенней загрузки.
Иногда - в моем случае это - причина неправильного импорта. Я случайно ввезла
import org.jvnet.hk2.annotations.Service
вместо того
import org.springframework.stereotype.Service
слепо принимая первый выбор в предложенном Идеей импорте. В первый раз это заняло у меня несколько минут :-)
Удивительно, но ориентированный на Feign проект, который успешно работал с Eclipse, не мог работать в InteliJ. Когда приложение запустилось, InteliJ пожаловался на клиент Feign, который я пытался внедрить в слой serviceImpl, сказав: поле personRestClient (мой клиент Feign) в ... требуется компонент типа ... который не может быть найден. Попробуйте определить bean-компонент типа «....» в вашей конфигурации.
Я потратил много времени, пытаясь понять, что не так. Я нашел решение (для InteliJ), которое я не совсем понимаю:
Или выберите Затмение :)
Используйте @AutoConfigureMockMvc для тестового класса.
просто вы должны сделать 2 шага
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Добавьте ваш основной класс в контекст приложения IntelliJ Spring, например Application.java
File
-> Project Structure..
левая сторона: Настройка проекта -> Модули
справа: найдите в вашей структуре пакета
Spring
и добавьте+
Application.java