web-dev-qa-db-fra.com

intellij disant à tort qu'aucun type de haricot n'a été trouvé pour le référentiel avec câblage automatique

J'ai créé un test unitaire simple mais IntelliJ ne le souligne pas correctement en rouge. en le marquant comme une erreur

Pas de haricots?

enter image description here

Comme vous pouvez le voir ci-dessous, il passe le test? Donc, il doit être câblé automatiquement?

enter image description here

85
Robbo_UK

J'ai eu le même problème lors de la création d'une application Spring Boot avec leur annotation @SpringBootApplication. Cette annotation représente @Configuration, @EnableAutoConfiguration et @ComponentScan en fonction de la référence de ressort .

Comme prévu, la nouvelle annotation fonctionnait correctement et mon application fonctionnait normalement, mais Intellij n'arrêtait pas de se plaindre des dépendances non remplies de @Autowire. Dès que je suis revenu à utiliser @Configuration, @EnableAutoConfiguration et @ComponentScan séparément, les erreurs ont cessé. Il semble que Intellij 14.0.3 (et très probablement les versions antérieures aussi) ne soit pas encore configuré pour reconnaître l'annotation @SpringBootApplication.

Pour l'instant, si les erreurs vous gênent 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.

120
Abimbola Esuruoso

Ajoutez l'annotation Spring @Repository sur la classe de référentiel. 

Je sais que cela devrait fonctionner sans cette annotation. Mais si vous ajoutez ceci, IntelliJ ne montrera pas d'erreur. 

@Repository
public interface YourRepository ...
...

Si vous utilisez des données de ressort avec une classe Repository étendue, il s'agira de pagkages de conflit. Ensuite, vous devez indiquer des pages explicites.

import org.springframework.data.repository.Repository;
...

@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
    ...
}

Et ensuite, vous pouvez installer votre référentiel automatiquement sans erreur.

@Autowired
YourRepository yourRepository;

Ce n'est probablement pas une bonne solution (j'imagine que vous essayez d'enregistrer deux fois le Repositorium). Mais travaille pour moi et ne montre pas les erreurs. 

Peut-être que dans la nouvelle version d’IntelliJ peut être corrigé: https://youtrack.jetbrains.com/issue/IDEA-137023

34
mkczyk

Ma version d'IntelliJ IDEA Ultimate (2016.3.4 Build 163) semble le supporter. L'astuce consiste à activer le plugin Spring Data.

 enter image description here

20
Natix

Je résous toujours ce problème en suivant de ..Paramètres> Inspections> Noyau de ressort> Code que vous passez d'une erreur à une option d'alerte de gravité

 enter image description here

13
cristianchiess

Vous devez parfois indiquer où @ComponentScan doit rechercher des composants. Vous pouvez le faire en passant les packages en tant que 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, vous devez donc procéder de la même manière: 

@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})

Au moins dans mon cas, Intellij a cessé de se plaindre. 

11
João Matos

J'utilise spring-boot 2.0, et l'édition finale d'intellij 2018.1.1 et le même problème.

J'ai résolu en plaçant @EnableAutoConfiguration dans la classe d'application principale

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
8
Kareem

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");
    }
}
5
wired00

Si vous ne souhaitez apporter aucune modification à votre code, cela rend simplement votre IDE heureux. Je l'ai résolu en ajoutant tous les composants à la facette Spring. 

  1. Créez un groupe portant le nom "Service, Processeurs et Routeurs" ou tout nom de votre choix.
  2. Supprimez et recréez le "Contexte d'application Spring". Utilisez le groupe que vous avez créé précédemment en tant que parent.

 enter image description here

Tant que vos tests sont satisfaisants, appuyez sur alt + enter en plaçant le curseur sur l'erreur et dans le sous-menu du premier élément, vous trouverez Disable Inspection sélectionnez cette option. 

3
imal hasaranga perera

Et un dernier élément d’information importante - ajoutez la ComponentScan pour que l’application sache tout ce dont elle a besoin pour effectuer le virement. Ceci n'est pas pertinent dans le cas de cette question. Cependant, si aucun @autowiring n'est exécuté, c'est probablement votre solution.

@Configuration
@ComponentScan(basePackages = {
    "some_package",
})
public class someService {
2
HankCa

J'utilise cette annotation pour masquer cette erreur lorsqu'elle apparaît dans IntelliJ v.14:

@SuppressWarnings("SpringJavaAutowiringInspection")

Ce que vous devez faire, c'est ajouter 

@ComponentScan("package/include/your/annotation/component") in AppConfiguration.Java

Puisque je pense que le package de votre AppConfiguraion.Java est plus profond que celui de votre composant d'annotation (@Service, @Component ...) 

comme "package/include/your/annotation/component/deeper/config".

2
sfwn

J'ai eu le même problème dans l'application Spring Boot. L'application utilise Feign (client HTTP synthétisant les demandes d'interfaces annotées). Ayant l'interface 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 connecter automatiquement un bean de type SomeClient, Idea se plaint qu'aucun bean de type SomeClient ne soit trouvé car aucune classe réelle n'existe réellement dans le projet et Idea n'est pas appris à comprendre l'annotation @FeignClient de quelque manière que ce soit.

Solution: annoter l'interface SomeClient avec @Component. (Dans notre cas, nous n'utilisons pas l'annotation @FeignClient directement sur SomeClient, nous utilisons plutôt la métaannotation @OurProjectFeignClient qui est annotée @FeignClient et l'ajout de l'annotation @Component fonctionne également.)

2
Tomáš Záluský

J'ai eu un problème similaire dans mon application .._. Lorsque j'ai ajouté des annotations en surbrillance mise en évidence a disparu.

@ContextConfiguration(classes = {...})
2
K. Gol

Pour moi, la solution a été de placer @EnableAutoConfiguration dans la classe Application sous le @SpringBootApplication pour le souligner parce que redondant. Supprimez-le et voila tous vos avertissements concernant les haricots manquants ont disparu! Printemps idiot ...

1
Farkas Archie Bako

dans mon cas, l'annuaire que j'essayais de @Autowired n'était pas au même niveau,

après l'avoir configurée au même niveau de structure, l'erreur a disparu

j'espère que ça peut aider quelqu'un!

1
Davel_AG

Tout ce que vous devez faire pour que cela fonctionne est le code suivant:

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
1
olammy

Je devais juste utiliser @EnableAutoConfiguration pour y remédier, mais cette erreur n'a eu aucun impact fonctionnel.

1
Smart Coder

Cela semble être encore un bogue dans le dernier IntelliJ et est lié à un problème de cache possible? 

Si vous ajoutez l'annotation @Repository en tant que mk321 mentionné ci-dessus, enregistrez, puis supprimez l'annotation et enregistrez à nouveau, le problème est résolu. 

1
Jensen Buck

Vérifiez si vous avez manqué l'annotation @Service dans votre classe de service, ce fut le cas pour moi.

1
yankae

Pour résoudre ce problème, placez @EnableAutoConfiguration sur la classe principale de l'application de démarrage de printemps. 

1
Nirbhay Rana

Utilisez @AutoConfigureMockMvc pour la classe de test.

0
Harshad Thombare

Parfois - dans mon cas c'est le cas - la raison est une mauvaise importation. J'ai accidentellement importé 

import org.jvnet.hk2.annotations.Service

au lieu de 

import org.springframework.stereotype.Service

en acceptant aveuglément le premier choix des importations suggérées par Idea. Cela m'a pris quelques minutes la première fois que ça s'est passé :-)

Ma solution à ce problème dans mon application de démarrage printanière consistait à ouvrir le contexte de l'application printanière et à ajouter la classe du bean autowired manquant manuellement!

(accès via le menu Structure du projet ou la fenêtre de l’outil Spring ... Modifier "Contexte Spring Application")

Ainsi, au lieu de SpringApplicationContext contenant uniquement ma configuration de ressort ExampleApplication, il contient également le bean manquant:

SpringApplicationContext:

  • ExampleApplication.Java
  • MissingBeanClass.Java

et voilà: le message d'erreur a disparu!

0
U.V.

Vérifiez si le paquet de votre haricot est écrit correctement

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}
0
Jöcker

Configurez le contexte de l'application et tout ira bien.

enter image description here

0
Arayik Harutyunyan

Étonnamment, un projet orienté Feign exécuté avec succès avec Eclipse ne pouvait pas être exécuté dans InteliJ. Au démarrage de l'application, InteliJ s'est plaint du client Feign que j'avais essayé d'injecter dans la couche serviceImpl en disant: field personRestClient (mon client Feign) dans ... avait besoin d'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:

  1. Alt Shift F10 (ou menu d'exécution)
  2. Sélectionnez 'Edit configuration'
  3. Dans la fenêtre de configuration, cochez la case "Inclure les dépendances avec la portée" fournie ".
  4. Exécuter votre application

Ou choisissez Eclipse :)

0
ylev