J'ai créé un test unitaire simple mais IntelliJ le met incorrectement en surbrillance rouge. le marquer comme une erreur
Pas de haricots?
Comme vous pouvez le voir ci-dessous, il passe le test? Alors ça doit être Autowired?
J'ai créé un test unitaire simple mais IntelliJ le met incorrectement en surbrillance rouge. le marquer comme une erreur
Pas de haricots?
Comme vous pouvez le voir ci-dessous, il passe le test? Alors ça doit être Autowired?
Réponses:
J'ai eu ce même problème lors de la création d'une application Spring Boot en utilisant leur @SpringBootApplication
annotation. Cette annotation représente @Configuration
, @EnableAutoConfiguration
et @ComponentScan
selon la référence du ressort .
Comme prévu, la nouvelle annotation fonctionnait correctement et mon application fonctionnait bien, mais Intellij n'arrêtait pas de se plaindre des @Autowire
dépendances non remplies . Dès que je suis revenu à l'utilisation @Configuration
, @EnableAutoConfiguration
et @ComponentScan
séparément, les erreurs ont cessé. Il semble qu'Intellij 14.0.3 (et très probablement les versions antérieures aussi) ne soit pas encore configuré pour reconnaître l' @SpringBootApplication
annotation.
Pour l'instant, si les erreurs vous dérangent autant, revenez à ces trois annotations distinctes. Sinon, ignorez Intellij ... votre résolution de dépendance est correctement configurée, car votre test réussit.
Toujours se rappeler...
L'homme est toujours plus grand que la machine.
@SpringBootApplication
je cette erreur. J'ai suivi les conseils de @ Jaõs Matos en utilisant le scanBasePackages
paramètre to @SpringBootApplication
et j'ai spécifié le package / les espaces de noms à analyser.
Ajoutez une annotation Spring @Repository
sur la classe de référentiel.
Je sais que cela devrait fonctionner sans cette annotation. Mais si vous ajoutez cela, IntelliJ n'affichera pas d'erreur.
@Repository
public interface YourRepository ...
...
Si vous utilisez Spring Data avec une Repository
classe d' extension , ce sera des pagkages de conflit. Ensuite, vous devez indiquer les pagkages d'explicité.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Et ensuite, vous pouvez configurer automatiquement votre référentiel sans erreur.
@Autowired
YourRepository yourRepository;
Ce n'est probablement pas une bonne solution (je suppose que vous essayez d'enregistrer deux fois le repositorium). Mais travaillez pour moi et ne montrez pas d'erreurs.
Peut-être que dans la nouvelle version d'IntelliJ peut être corrigé: https://youtrack.jetbrains.com/issue/IDEA-137023
Ma version d'IntelliJ IDEA Ultimate (2016.3.4 Build 163) semble prendre en charge cela. L'astuce est que vous devez avoir activé le plugin Spring Data.
Parfois, vous devez indiquer où @ComponentScan doit rechercher les composants. Vous pouvez le faire en passant les packages comme paramètre de cette annotation, par exemple:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Cependant, comme déjà mentionné, l'annotation @SpringBootApplication remplace @ComponentScan, par conséquent, dans de tels cas, vous devez faire de même:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Au moins dans mon cas, Intellij a cessé de se plaindre.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
et même si l'application fonctionnait bien, intellij ne l'aimait pas. Changer pour @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
fixe pour moi!
Je résous toujours ce problème en suivant .. Paramètres> Inspections> Spring Core> Code que vous passez de l'erreur à l'avertissement de l'option de gravité
J'utilise spring-boot 2.0 et intellij 2018.1.1 Ultimate Edition et j'ai rencontré le même problème.
J'ai résolu en plaçant @EnableAutoConfiguration dans la classe d'application principale
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Mettre @Component
ou @configuration
dans votre fichier de configuration de bean semble fonctionner, c'est-à-dire quelque chose comme:
@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");
}
}
Si vous ne voulez apporter aucune modification à votre code, juste pour rendre votre IDE heureux. Je l'ai résolu en ajoutant tous les composants à la facette Spring.
Tant que vos tests réussissent, vous êtes bon, appuyez sur alt + enter
en prenant le curseur sur l'erreur et à l'intérieur du sous-menu du premier élément, vous trouverez Disable Inspection
sélectionnez cela
J'ai eu un problème similaire dans l'application Spring Boot. L'application utilise Feign (client HTTP synthétisant les requêtes des interfaces annotées). L'interface étant SomeClient
annotée avec @FeignClient
, Feign génère une classe de proxy d'exécution implémentant cette interface. Lorsqu'un composant Spring essaie de faire passer automatiquement un bean de type SomeClient
, Idea se plaint qu'aucun bean de type SomeClient
n'a été trouvé car aucune classe réelle n'existe réellement dans le projet et Idea n'est pas enseigné à comprendre@FeignClient
annotation.
Solution: annoter l'interface SomeClient
avec @Component
. (Dans notre cas, nous n'utilisons pas d' @FeignClient
annotation SomeClient
directement, nous utilisons plutôt la méta-annotation @OurProjectFeignClient
qui est annotée @FeignClient
et l'ajout d' @Component
annotation fonctionne également.)
@Component
à l'interface résout le problème. Mais je pense que ce n'est pas la bonne façon ... À mon avis, c'est un bogue dans IntelliJ IDEA ou pour être pas si difficile IntelliJ IDEA n'est pas prêt pour les nouvelles versions de Feign. Cela fonctionne sans @Component
dans les versions fictives précédentes (où se trouvait l' @FeignClient
annotation au org.springframework.cloud.netflix.feign
lieu de org.springframework.cloud.openfeign
- c'est peut-être la cause du problème?). Avez-vous trouvé d'autres détails (peut-être un ticket de bogue) à ce sujet?
@Component
) soit @FeignClient
de org.springframework.cloud.netflix.feign
) package.
Et une dernière information importante - ajoutez le ComponentScan
pour que l'application sache ce qu'elle doit câbler. Cela n'est pas pertinent dans le cas de cette question. Cependant, si aucun @autowiring
n'est en cours, c'est probablement votre solution.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Ce que vous devez faire est d'ajouter
@ComponentScan("package/include/your/annotation/component")
dans AppConfiguration.java
.
Puisque je pense que AppConfiguraion.java
le paquet de votre est plus profond que le paquet de votre composant d'annotation (@Service, @Component ...),
comme "package/include/your/annotation/component/deeper/config"
.
J'ai eu un problème similaire dans mon application. Lorsque j'ai ajouté des annotations, les surlignages incorrects ont disparu.
@ContextConfiguration(classes = {...})
J'utilise cette annotation pour masquer cette erreur lorsqu'elle apparaît dans IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Pour moi, la solution était de placer @EnableAutoConfiguration
dans la classe Application sous le @SpringBootApplication
son va le souligner car c'est redondant. Supprimez-le et voila tous les avertissements concernant les haricots manquants ont disparu! Printemps idiot ...
Ma solution à ce problème dans mon application Spring Boot était d'ouvrir le contexte de l'application Spring et d'ajouter manuellement la classe du bean câblé automatique manquant!
(accès via le menu Structure du projet ou la fenêtre de l'outil Spring ... éditer "Spring Application Context")
Donc, au lieu de SpringApplicationContext ne contenant que ma configuration de ressort ExampleApplication, il contient également le Bean manquant:
SpringApplicationContext:
et voilà: le message d'erreur a disparu!
Cela semble être encore un bogue dans la dernière IntelliJ et a à voir avec un problème de mise en cache possible?
Si vous ajoutez l'annotation @Repository en tant que mk321 mentionnée ci-dessus, enregistrez, puis supprimez l'annotation et enregistrez à nouveau, cela résout le problème.
Je devais juste utiliser @EnableAutoConfiguration pour y remédier, mais cette erreur n'avait aucun impact fonctionnel.
Il peut être résolu en plaçant @EnableAutoConfiguration sur la classe principale de l'application Spring Boot.
Parfois - dans mon cas c'est le cas - la raison est une mauvaise importation. J'ai importé accidentellement
import org.jvnet.hk2.annotations.Service
au lieu de
import org.springframework.stereotype.Service
en acceptant aveuglément le premier choix dans les importations suggérées par Idea. Cela m'a pris quelques minutes la première fois que cela s'est produit :-)
Étonnamment, un projet orienté Feign qui s'est exécuté avec succès avec Eclipse n'a pas pu s'exécuter dans InteliJ. Au démarrage de l'application, InteliJ s'est plaint du client Feign que j'ai essayé d'injecter dans la couche serviceImpl en disant: field personRestClient (mon client Feign) dans ... nécessitait un bean de type ... qui n'a pas pu être trouvé. Pensez à définir un bean de type '....' dans votre configuration.
J'ai perdu beaucoup de temps à essayer de comprendre ce qui ne va pas. J'ai trouvé une solution (pour InteliJ) que je ne comprends pas complètement:
Ou choisissez Eclipse :)
Utilisez @AutoConfigureMockMvc pour la classe de test.
simple vous devez faire 2 étapes
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
Ajoutez votre classe principale au contexte d'application IntelliJ Spring, par exemple Application.java
File
-> Project Structure..
côté gauche: Paramètres du projet -> Modules
côté droit: recherchez dans la structure de votre package
Spring
et ajoutez+
Application.java