Question intellij ne dit pas correctement les beans de type trouvés pour le dépôt automatique


J'ai créé un test unitaire simple, mais IntelliJ le signale de manière incorrecte en rouge. le marquer 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 Autowired?

enter image description here


70
2017-11-12 15:00


origine


Réponses:


J'ai eu ce même problème lors de la création d'un Botte de printemps application en utilisant leur @SpringBootApplication annotation. Cette annotation représente @Configuration, @EnableAutoConfiguration et @ComponentScan selon le référence de printemps.

Comme prévu, la nouvelle annotation a fonctionné correctement et mon application s'est déroulée sans problème, mais Intellij continué à se plaindre de l'inaccompli @Autowire dépendances. Dès que je suis revenu à utiliser @Configuration, @EnableAutoConfiguration et @ComponentScan séparément, les erreurs ont cessé. Il semble Intellij 14.0.3 (et probablement, les versions antérieures aussi) n'est pas encore configuré pour reconnaître le @SpringBootApplication annotation.

Pour l'instant, si les erreurs vous dérangent beaucoup, revenez à ces trois annotations distinctes. Sinon, ignorez Intellij... votre résolution de dépendance est correctement configurée depuis votre test.

Toujours se rappeler...

L'homme est toujours plus grand que la machine.


89
2017-08-08 09:46



Ajouter une 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 Spring avec extension Repository classe ce sera des conflits de conflits. Ensuite, vous devez indiquer les pagkages explicite.

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

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

Et ensuite, vous pouvez envoyer 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 travaille pour moi et ne montre pas d'erreurs.

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


28
2018-01-16 05:52



Ma version d'IntelliJ IDEA Ultimate (2016.3.4 Build 163) semble le supporter. L'astuce est que vous devez avoir activé le plugin Spring Data.

enter image description here


13
2018-02-03 13:43



Je résous toujours ce problème en faisant de suite .. Paramètres> Inspections> Spring Core> Code que vous passez de l'erreur à l'avertissement de l'option de gravité

enter image description here


10
2018-01-24 11:45



J'utilise Spring-Boot 2.0 et Intelli 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 principale de l'application

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

7
2018-04-12 09:59



Vous devez parfois indiquer où @ComponentScan doit rechercher les composants. Vous pouvez le faire en passant les packages en 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 la même chose:

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

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


4
2018-01-20 15:00



Si vous ne souhaitez pas modifier votre code, contentez-vous de rendre votre IDE heureux. Je l'ai résolu en ajoutant tous les composants à la facette Spring.

  1. Créez un groupe avec le nom "Service, Processors and Routers" ou tout nom que vous voulez;
  2. Supprimez et recréez "Contexte d'application Spring" utilisez le groupe que vous avez créé précédemment en tant que parent.

enter image description here


3
2018-05-31 07:36



En mettant @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");
    }
}

2
2018-04-21 02:15