web-dev-qa-db-fra.com

IntelliJ IDEA affiche les erreurs lors de l'utilisation de l'annotation @Autowired de Spring

IntelliJ IDEA affiche des erreurs lorsque j'utilise Spring @Autowired annotation dans la classe, mais la classe fonctionne sans problème.

Voici ce message d'erreur:

Les membres auto-câblés doivent être définis dans le bean de printemps valide (@ Component/@ Service, etc.) moins ... (Ctrl + F1) Vérifie les problèmes d'auto-câblage dans une classe de bean.

88
Vainlyh

J'ai eu le même problème avec IntelliJ IDEA 13.1.4. Je l'ai résolu en supprimant la facette Spring (Fichier-> Structure du projet) et en la laissant simplement afficher "Détection".

30
Jose Leon

Si vous savez que le bean existe et qu'il ne s'agit que d'un problème d'inspections, ajoutez simplement ce qui suit avant la déclaration de variable:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

Parfois, IntelliJ ne peut pas résoudre si un bean a été déclaré, par exemple lorsque le bean est inclus conditionnellement et que la résolution de la condition se produit au moment de l'exécution.

18
lanoxx

Vous avez la même erreur ici!

Il semble que l’Intellij ne puisse pas vérifier si l’implémentation de la classe est un @Service ou un @Component.

Résolvez-le en passant de Error à Warning (en appuyant sur Alt + Entrée).

18
Thiago Pereira

Supprimez le fichier .iml de tous les modules de votre projet et cliquez sur Fichier -> Invalider les caches/redémarrer.

17
Maciej

Fichier -> ProjectStructure -> Modules -> + (dans la colonne centrale) -> Printemps -> OK

13
Aleksey Samoylov

Je l'ai corrigé en ajoutant l'avertissement de suppression:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....
13
user3580264

J'ai eu le même problème. Je l'ai résolu en ajoutant la facette Spring (Fichier-> Structure du projet) pour chaque module concerné, puis les fichiers de configuration. Pour certains projets (spring mvc), les fichiers de configuration étaient détectés automatiquement. Cependant, pour un projet jar, je devais ajouter les fichiers de configuration manuellement.

5
jbarrameda

Assurez-vous que vos définitions de haricots du printemps sont correctes. Parfois, l’application fonctionne correctement, elle affiche simplement une erreur dans l’EDI. Vérifiez le fichier ‘iml’ de votre projet si vous avez une facette Spring définie.

4
i-bob

Assurez-vous que votre IDE (IntelliJ Idea) connaît toutes les configurations de ressort nécessaires pour l’inspection de votre module.

Vous pouvez vérifier ceci sous

Fichier> Structure du projet> Modules> [nom de votre projet dans le panneau de droite]> Spring

Parfois, nous devons indiquer explicitement à IDE) que la configuration de ressort provient d'une dépendance (un fichier jar présent dans le chemin de classe de votre projet).

2
vivekmore

Le problème a été résolu en accédant à Fichier >> Structure du projet >> Facettes, puis en ajoutant tous les fichiers de configuration à Spring Facet. Après cela, il a commencé à détecter les fichiers dans lesquels les beans résident et a pu résoudre le problème. IntelliJ donner ce chèque est très utile et IMHO ne devrait pas être désactivé.

2
tomcyjohn

J'ai eu ce problème également. Faire alt+enter et en demandant ensuite soit de relancer ou de désactiver l'inspection Spring sur la ligne affectée l'a corrigée. Cela semble seulement être devenu un problème après la mise à jour 13.4.

1
Jason D

Cela ressemble à un problème de visibilité: le contrôleur parent ne voit pas le composant que vous essayez de câbler.

Essayez d'ajouter

@ComponentScan("path to respective Component") 

au contrôleur parent.

1
Eugene Karasev

Vous devriez vérifier si vous avez ajouté @Component, @Repository ou similaire à la classe

1
Milos Nikolik

Le mien est de ne pas ajouter @Repository sur mon interface CrudRepository, le tutoriel que je regardais ne l'a pas ajouté sur STS et il ne s'est pas plaint.

1
Rejinderi

dans mon cas il me manquait d'écrire dans web.xml:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

et dans le fichier de contexte d'application:

<context:component-scan base-package=[your package name] />

après avoir ajouté ces balises et lancé maven pour reconstruire le projet, l’erreur de transmission automatique dans intellj desapears et l’icône du haricot apparaît dans la marge de gauche: enter image description here

1
demian

J'ai le même problème. Le mien était dû au fait que le haricot contenant la référence autowired n'était pas un composant Spring (c'était un EJB), mais un intercepteur SpringBeanAutowiringInterceptor permettant l'utilisation du autowiring. Je pense qu'Intellij n'accepte pas cette possibilité dans son inspection du câblage automatique.

1
Teocali

Injecter Bean avec @Qualifier a résolu le problème pour moi.

0
Ponleu
eg1:
director:Settings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {
0
lee

J'ai eu le même problème. Je l'ai résolu en décochant l'option "Traiter les haricots explicitement annotés" (voir capture d'écran ci-dessous). Cette option est activée par défaut sur Linux. Les annotations @Service et @Configurations sont maintenant visibles. capture d'écran

0
Aleksander Burzec

J'ai résolu cela en ajoutant une facette Web.

0
Pavel Vlasov

un peu tard, mais j'espère que cela aidera à quelqu'un d'autre.

Assurez-vous de placer le @Service sur la classe d'implémentation du service.

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

C'est comme ça que j'ai corrigé l'erreur.

0
Mar Villeneuve

J'ai résolu ce problème de cette façon. Dans IntelliJ, tous vos packages doivent figurer dans un sous-package qui est le sous-package de main/Java. Par exemple, j'ai placé tous mes paquets sous src/main/Java/com.misisol.watchStore/et spring pourrait trouver mes beans ensuite.

0
Mehrdad Sharifi