Я создал простой модульный тест, но 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аннотирования интерфейса @FeignClientFeign генерирует прокси-класс времени выполнения, реализующий этот интерфейс. Когда какой-либо компонент 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.feignorg.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