Maison >Java >javaDidacticiel >Quelles sont les raisons pour lesquelles l'injection SpringBoot @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 !
******************************
É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.
Ce problème est un problème environnemental, dans les profils, c'était l'environnement de développement
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!