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.
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".
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.
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).
Supprimez le fichier .iml de tous les modules de votre projet et cliquez sur Fichier -> Invalider les caches/redémarrer.
Fichier -> ProjectStructure -> Modules -> + (dans la colonne centrale) -> Printemps -> OK
Je l'ai corrigé en ajoutant l'avertissement de suppression:
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private ....
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.
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.
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).
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é.
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.
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.
Vous devriez vérifier si vous avez ajouté @Component, @Repository ou similaire à la classe
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.
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:
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.
Injecter Bean avec @Qualifier a résolu le problème pour moi.
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 {
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
J'ai résolu cela en ajoutant une facette Web.
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.
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.