Я создал простой unit test, но IntelliJ неправильно выделяет его красным. отмечая его как ошибку
Нет beans?
Как вы можете видеть ниже, он проходит тест? Итак, это должно быть Autowired?
Я создал простой unit test, но IntelliJ неправильно выделяет его красным. отмечая его как ошибку
Нет beans?
Как вы можете видеть ниже, он проходит тест? Итак, это должно быть Autowired?
У меня была такая же проблема при создании приложения Spring Boot с использованием их аннотации @SpringBootApplication
. Эта аннотация представляет @Configuration
, @EnableAutoConfiguration
и @ComponentScan
соответствии со ссылками на источники.
Как и ожидалось, новая аннотация работала правильно, и мое приложение работало нормально, но Intellij продолжал жаловаться на невыполненные зависимости @Autowire
. Как только я вернулся к использованию @Configuration
, @EnableAutoConfiguration
и @ComponentScan
отдельности, ошибки прекратились. Похоже, что Intellij 14.0.3 (и, скорее всего, более ранние версии) еще не настроен на распознавание аннотации @SpringBootApplication
.
А пока, если ошибки вас так сильно беспокоят, вернитесь к этим трем отдельным аннотациям. В противном случае игнорируйте Intellij... ваше разрешение зависимостей правильно настроено, так как ваш тест пройден.
Всегда помни...
Человек всегда больше машины.
Добавить 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
Моя версия 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 прекратил жаловаться.
Я всегда решаю эту проблему, выполняя следующие действия: Настройки> Инспекции> Spring Core> Код, чем переход от ошибки к предупреждению о серьезности
Я использую Spring-Boot 2.0 и Intellij 2018.1.1 Ultimate Edition, и я столкнулся с той же проблемой.
Я решил, поместив @EnableAutoConfiguration в основной класс приложения
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Ввод @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
выберите
И одна последняя важная информация - добавьте 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"
.
У меня была аналогичная проблема в моем приложении. Когда я добавил аннотации, неправильный highliting dissapeared.
@ContextConfiguration(classes = {...})
Я использую эту аннотацию, чтобы скрыть эту ошибку, когда она появляется в IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
У меня была похожая проблема в приложении Spring Boot. Приложение использует Feign (запросы клиента HTTP-синтеза от аннотированных интерфейсов). Имея интерфейс SomeClient
аннотацией @FeignClient
, Feign генерирует прокси-класс времени выполнения, реализующий этот интерфейс. Когда какой-то компонент Spring пытается автоматически связать bean-компонент типа SomeClient
, Idea жалуется, что не найден bean-компонент типа SomeClient
поскольку в проекте фактически не существует реального класса, и Idea не учат понимать аннотацию @FeignClient
каким-либо образом.
Решение: аннотируйте интерфейс SomeClient
с @Component
. (В нашем случае, мы не используем @FeignClient
аннотации SomeClient
напрямую, мы скорее использовать metaannotation @OurProjectFeignClient
который аннотированный @FeignClient
и добавление @Component
аннотации к ней работает хорошо.)
Проверьте, не пропустили ли вы аннотацию @Service в своем классе обслуживания, это было именно для меня.
Кажется, это все еще является ошибкой в последнем IntelliJ и связано с возможной проблемой кэширования?
Если вы добавите аннотацию @Repository в качестве mk321, упомянутой выше, сохраните, затем удалите аннотацию и сохраните снова, это устраняет проблему.
Все, что вам нужно сделать, чтобы сделать эту работу, это следующий код:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
Мне просто нужно было использовать @EnableAutoConfiguration для решения этой проблемы, однако эта ошибка не имела никакого функционального влияния.
Это можно решить, поместив @EnableAutoConfiguration в основной класс приложения весенней загрузки.
Для меня решение состояло в том, чтобы поместить @EnableAutoConfiguration
в класс Application под @SpringBootApplication
будет подчеркивать, потому что он избыточен. Удалите его и вуаля все ваши предупреждения о пропавших бобов исчезли! Глупая spring...
в моем случае, каталог, который я пытался @Autowired, был не на том же уровне,
после настройки на том же уровне структуры ошибка исчезла
надеюсь, что это может помочь кому-то!
Мое решение этой проблемы в моем загрузочном приложении spring состояло в том, чтобы открыть контекст приложения spring и добавить класс для отсутствующего автоматически созданного bean вручную!
(доступ через меню структуры проекта или окно инструмента spring... edit "Spring Контекст приложения" )
Итак, вместо SpringApplicationContext, который просто содержит мою конфигурацию ExampleApplication spring, он также содержит отсутствующий Bean:
SpringApplicationContext:
et voilà: сообщение об ошибке исчезло!
Иногда - в моем случае это - причина неправильного импорта. Я случайно ввез
import org.jvnet.hk2.annotations.Service
вместо
import org.springframework.stereotype.Service
слепо принимая первый выбор в предложенном Идеей импорте. В первый раз это заняло у меня несколько минут :-)
Удивительно, но ориентированный на Feign проект, который успешно работал с Eclipse, не мог работать в InteliJ. Когда приложение запустилось, InteliJ пожаловался на клиента Feign, который я пытался внедрить в слой serviceImpl, сказав: поле personRestClient (мой клиент Feign) в... требуется компонент типа... который не может быть найден. Попробуйте определить bean-компонент типа "...." в вашей конфигурации.
Я потратил много времени, пытаясь понять, что не так. Я нашел решение (для InteliJ), которое я не совсем понимаю:
Или выберите Затмение :)
Проверьте правильность написания пакета вашего компонента
//Check if this is written right
package com.package1.package2.package3
import ...
@Service
class ServiceX {
...
}
Используйте @AutoConfigureMockMvc для тестового класса.
Настройте контекст приложения, и все будет хорошо.
Я решил проблему, установив плагин mybatis в IDEA. Когда я установил Mybatis Plugin, он исчез.
В моем случае я изменил @Autowired на @Resource ,, а неправильные подсказки просто исчезли
Я тоже столкнулся с этой проблемой и разрешил ее удалением Spring Facet:
Facets
Удачи!