最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中@Autowired 失效及@Autowired 注入為null的解決

 更新時間:2024年09月10日 11:23:47   作者:藏熱烈于俗常  
在SpringBoot項目中,@Autowired注解用于自動注入依賴,但有時會注入失敗導致空指針異常,下面就來介紹一下如何解決,感興趣的可以了解一下

一、問題

使用@Atuowried注入Bean失敗,導致空指針異常。

二、大致背景

SpringBoot版本:2.6.14,基于SpringSecurity實現(xiàn)郵箱驗證碼登錄功能。EmailCodeAuthenticationSuccessHandler為郵件驗證碼登錄認證成功的Handler,實現(xiàn)認證成功后返回響應,響應體為登錄用戶名以及JWTUtil生成的token。EmailCodeAuthenticationSuccessHandler中使用@Atuowried將JWTUtil自動注入進來。

JWTUtil:

在這里插入圖片描述

三、具體報錯:

在生成token時,報了一個空指針異常

(1)報錯分析

在Spring Security的認證過程中,EmailcodeAuthenticationSuccessHandler類的onAuthenticationSuccess方法的第45行:data.put(“token”, jwtUtil.createToken(userId));,發(fā)生了一個NullPointerException(空指針異常)。

在這里插入圖片描述

(2)問題定位

data是new出來的JSONObject(),只有可能是JWTUtil注入為null導致空指針異常。

(3)斷點調(diào)試

在這里插入圖片描述

bingo!確實是@Atuowried注入失敗,導致jwtUtil為null,從而在調(diào)用createToken方法時出現(xiàn)空指針異常。

四、具體問題

為什么@Atuowried注入失敗/@Atuowried注入為null

查各類博客總結(jié)如下:

(1)被注入的對象沒有加載到Spring容器中

? 缺少@Component之類的注解或者沒有被Spring掃描到。

(2)自定義配置存在問題

? 自定義的BeanFactory沒有正確配置,導致Spring容器無法識別自定義的Bean。

(3)被注入的對象不是Spring加載

? 通過反射或者熱部署加載的類Spring無法根據(jù)注解自動注入。

(4)需要自動注入的對象存在被new出來的實例

? 對象new實例化后,導致對象沒有交給Spring容器管理,所以無法自動注入。一般是指引用某些框架,自定義了類繼承某個接口,但是在這些框架中默認new過這個類,比如MVC攔截的HandlerInterceptor類。如果要new的這個類里有需要@autowired 自動注入的內(nèi)容,則自動注入無效。

五、本問題的原因

在LoginServiceImpl中注入JWTUtil正常,問題出在接口AuthenticationFailureHandler上。可能是SpringSecurity 通過new創(chuàng)建過 EmailcodeAuthenticationSuccessHandler的實例,導致其無法實現(xiàn)自動注入。

六、解決方案

確實需要在這個new 的類去注入某些類,但是用@Autowired 又注入為null,這時候就需要去實現(xiàn)ApplicationContextAware接口,拿到IOC容器,實現(xiàn)手動獲取Bean。

(1)具體代碼:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @Description 一個類實現(xiàn)了ApplicationContextAware接口后,就可以獲得ApplicationContext中的所有bean
 *              用于解決某些類因為有被new出來的實例導致@Autowired失效的問題
 * @Author wxp
 * @Date 2024/7/9 12:47
 */
@Component
public class BeanUtils implements ApplicationContextAware {
    
    protected static ApplicationContext applicationContext;

    /**
     * 實現(xiàn)ApplicationContextAware接口的回調(diào)方法,設(shè)置上下文環(huán)境
     * @param arg spring上下文對象
     * @throws BeansException 拋出spring異常
     */
    @Override
    public void setApplicationContext(ApplicationContext arg) throws BeansException {
        if (applicationContext == null) {
            applicationContext = arg;
        }
    }

    /**
     * 獲取spring上下文對象
     * @return 上下文對象
     */
    public static ApplicationContext getContext() {
        return context;
    }

    /**
     * 根據(jù)beanName獲取bean
     * @param beanName bean的名稱
     * @return bean對象
     */
    public Object getBean(String beanName) {
        return context.getBean(beanName);
    }

    /**
     * 根據(jù)beanName和類型獲取bean
     * @param beanName bean名稱
     * @param clazz    bean的Class類型
     * @param <T>      bean的類型
     * @return bean對象
     */
    public <T> T getBean(String beanName, Class<T> clazz) {
        return context.getBean(beanName, clazz);
    }

    /**
     * 根據(jù)類型獲取bean
     * @param clazz bean的Class類型
     * @param <T>   bean的類型
     * @return bean對象
     */
    public <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }
}

(2)具體使用:

JWTUtil jwtUtil = BeanUtils.getBean(JWTUtil.class);

到此這篇關(guān)于SpringBoot中@Autowired 失效及@Autowired 注入為null的解決的文章就介紹到這了,更多相關(guān)SpringBoot @Autowired 失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • struts升級到2.5.2遇到的問題及解決方案(推薦)

    struts升級到2.5.2遇到的問題及解決方案(推薦)

    原來的版本是2.3.x,由于安全原因需要升級到2.5.2。但是在升級過程中遇到各種各樣的問題,下面小編給大家?guī)砹藄truts升級到2.5.2遇到的問題及解決方案,需要的朋友參考下吧
    2016-11-11
  • 使用MybatisPlus實現(xiàn)sql日志打印優(yōu)化

    使用MybatisPlus實現(xiàn)sql日志打印優(yōu)化

    本文主要介紹了使用MybatisPlus實現(xiàn)sql日志打印優(yōu)化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • java基礎(chǔ)知識之FileInputStream流的使用

    java基礎(chǔ)知識之FileInputStream流的使用

    這篇文章主要介紹了java基礎(chǔ)知識之FileInputStream流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java StringBuilder和StringBuffer源碼分析

    Java StringBuilder和StringBuffer源碼分析

    這篇文章主要針對Java中兩個常用的操作字符串的類 StringBuilder和StringBuffer進行源碼分析,感興趣的小伙伴們可以參考一下
    2016-01-01
  • SpringMVC實現(xiàn)全局異常處理器的經(jīng)典案例

    SpringMVC實現(xiàn)全局異常處理器的經(jīng)典案例

    文章介紹了如何使用@ControllerAdvice和相關(guān)注解實現(xiàn)SpringMVC的全局異常處理,通過統(tǒng)一的異常處理類和自定義業(yè)務異常類,可以將所有控制器的異常集中處理,并以JSON格式返回給前端,感興趣的朋友一起看看吧
    2025-03-03
  • Java?超詳細講解Spring?MVC異常處理機制

    Java?超詳細講解Spring?MVC異常處理機制

    Spring?MVC中提供了一個通用的異常處理機制,它提供了一個成熟、簡潔并且清晰的異常處理方案。當使用Spring?MVC開發(fā)Web應用時,利用這套現(xiàn)成的機制進行異常處理也更加自然并且高效
    2022-04-04
  • SpringCloud實戰(zhàn)之Feign聲明式服務調(diào)用

    SpringCloud實戰(zhàn)之Feign聲明式服務調(diào)用

    這篇文章主要介紹了SpringCloud實戰(zhàn)之Feign聲明式服務調(diào)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • SpringBoot中使用線程池控制主線程與子線程事務的全過程

    SpringBoot中使用線程池控制主線程與子線程事務的全過程

    SpringBoot中使用線程池控制主線程和子線程的事務是一個復雜但重要的話題,在Spring框架中,事務管理是基于ThreadLocal實現(xiàn)的,接下來通過本文給大家介紹SpringBoot中使用線程池控制主線程與子線程事務的方法,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • SpringBoot基于AOP的本地/遠程調(diào)用動態(tài)路由實踐指南

    SpringBoot基于AOP的本地/遠程調(diào)用動態(tài)路由實踐指南

    這篇文章主要為大家詳細介紹了SpringBoot基于AOP的本地/遠程調(diào)用動態(tài)路由實踐指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-07-07
  • Maven中Junit測試@Test等注解無法識別的問題及解決

    Maven中Junit測試@Test等注解無法識別的問題及解決

    這篇文章主要介紹了Maven中Junit測試@Test等注解無法識別的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論

井陉县| 福贡县| 商河县| 西华县| 香河县| 乌恰县| 涞源县| 化隆| 特克斯县| 凤城市| 吉林市| 西贡区| 高安市| 旅游| 揭西县| 紫金县| 大丰市| 神木县| 敖汉旗| 筠连县| 隆德县| 定安县| 贵德县| 阿图什市| 延津县| 宜宾县| 长垣县| 文山县| 师宗县| 彭水| 永登县| 雷山县| 柳州市| 罗田县| 四川省| 兴化市| 河东区| 澄迈县| 阿拉善右旗| 漾濞| 德化县|