Maison  >  Article  >  Java  >  Quelles sont les raisons pour lesquelles l’injection SpringBoot @Autowired est vide ?

Quelles sont les raisons pour lesquelles l’injection SpringBoot @Autowired est vide ?

PHPz
PHPzavant
2023-05-14 18:40:153297parcourir

    Interprétation de la situation où l'injection @Autowired est vide

    En raison de la récente rencontre en développement lors de l'utilisation de l'annotation @Autowired pour l'assemblage automatique, un pointeur nul sera signalé et il s'avère que l'objet n'a pas été assemblé. Grâce à une requête, plusieurs possibilités ont été résumées. Quelles sont les causes de cela.

    1. Dans le cas le plus simple, vérifiez la classe assemblée, c'est-à-dire si la classe sous l'annotation @Autowired est annotée et transmise à SpringBoot pour l'hébergement, @service et d'autres annotations, ou si l'annotation @Component est ajoutée directement.

    2. Vérifiez si votre xxxxxApplication se trouve dans le répertoire racine, car Springboot analyse le répertoire sous la classe de démarrage par défaut (je me souviens que cela n'est limité qu'aux versions antérieures à Springboot2.0.5, car la nouvelle version peut spécifier la plage d'analyse via le @ComponenScan) .

    3. Les annotations Spring telles que @Service, @Componet, @Configuration et @Repository n'ont pas été analysées. Par exemple : les règles d'analyse de la classe principale de Springboot signifient que vous devez vérifier votre classe de démarrage Springboot, xxxxxApplication, et vérifier si elle existe. sont des annotations sur la classe de démarrage. L'annotation @ComponenScan est ajoutée pour déterminer si la plage d'analyse est spécifiée.

    Deux méthodes de configuration des annotations pour utiliser Springboot pour démarrer l'analyse de la configuration de classe :

    • 1, @Controller @EnableAutoConfiguration @ComponentScan.

    • 2. @SpringBootApplication

    4. Si la cause n'est pas trouvée, nous utilisons d'abord d'autres méthodes pour que le programme s'exécute et débogue normalement, puis trouvons le problème plus tard.

    @Autowired
     private SchedulerFactoryBean schedulerFactoryBean;
        
     private static QuartzManager quartzManager;
        
     /**
      * 通过@PostConstruct实现初始化bean之前进行的操作
      * @desc 初始化操作,得到QuartzManager实例
      * @Date 2019年1月7日
      */
     @PostConstruct 
     public void init() {  
          quartzManager = this;  
          quartzManager.schedulerFactoryBean = this.schedulerFactoryBean;        
    }

    Utilisez @PostConstruct pour initialiser.

    5. Cette raison est très importante et est aussi un facteur souvent ignoré. L'appelant vient du nouveau. S'il y a une propriété membre B dans la classe A, B est automatiquement injecté via @Autowired et l'instance de la classe A est générée via new, alors l'injection automatique sera invalide. À ce stade, toutes les méthodes Bean sont obtenues via Spring. contexte. Obtenez B. À ce stade, jetez un œil à la classe pour laquelle vous signalez un pointeur nul pour voir si elle a été créée par new. Si tel est le cas, vous pouvez également utiliser la méthode SpringUtil.getBean() pour le remplacer, puis réessayer !

    @Fève injectée par Autowired introuvable exception

    Description de l'exception

    ******************************
    ÉCHEC DE L'APPLICATION DÉBUT
    ****************************

    Description :

    Client de terrainAuthService dans com.yinhai.mzgh.eurekaclient.feign.interceptor. Oauth3RequestInterceptor
    nécessitait un bean de type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' qui n'a pas pu être trouvé.

    Le point d'injection a les annotations suivantes :
    - @org.springframework.beans.factory.annotation .Autowired (required=true)


    Action :

    Envisagez de définir un bean de type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' dans votre configuration.

    Cause du problème

    Ce problème est un problème environnemental, dans les profils, c'était l'environnement de développement

    Quelles sont les raisons pour lesquelles l’injection SpringBoot @Autowired est vide ?

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer