欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2024年09月10日 11:23:47   作者:藏?zé)崃矣谒壮? 
在SpringBoot項(xiàng)目中,@Autowired注解用于自動(dòng)注入依賴,但有時(shí)會(huì)注入失敗導(dǎo)致空指針異常,下面就來介紹一下如何解決,感興趣的可以了解一下

一、問題

使用@Atuowried注入Bean失敗,導(dǎo)致空指針異常。

二、大致背景

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

JWTUtil:

在這里插入圖片描述

三、具體報(bào)錯(cuò):

在生成token時(shí),報(bào)了一個(gè)空指針異常

(1)報(bào)錯(cuò)分析

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

在這里插入圖片描述

(2)問題定位

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

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

在這里插入圖片描述

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

四、具體問題

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

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

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

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

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

? 自定義的BeanFactory沒有正確配置,導(dǎo)致Spring容器無法識(shí)別自定義的Bean。

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

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

(4)需要自動(dòng)注入的對(duì)象存在被new出來的實(shí)例

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

五、本問題的原因

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

六、解決方案

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

(1)具體代碼:

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

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

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

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

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

    /**
     * 根據(jù)beanName和類型獲取bean
     * @param beanName bean名稱
     * @param clazz    bean的Class類型
     * @param <T>      bean的類型
     * @return bean對(duì)象
     */
    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對(duì)象
     */
    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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java C++題解leetcode1620網(wǎng)絡(luò)信號(hào)最好的坐標(biāo)

    Java C++題解leetcode1620網(wǎng)絡(luò)信號(hào)最好的坐標(biāo)

    這篇文章主要為大家介紹了Java C++題解leetcode1620網(wǎng)絡(luò)信號(hào)最好的坐標(biāo)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Java Swing組件定制CheckBox示例

    Java Swing組件定制CheckBox示例

    這篇文章主要介紹了Java Swing組件定制CheckBox,涉及Java swing組件CheckBox相關(guān)屬性與設(shè)置操作技巧,需要的朋友可以參考下
    2018-01-01
  • Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系

    Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系

    這篇文章主要為大家詳細(xì)介紹了Java Swing窗體關(guān)閉事件的調(diào)用關(guān)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java靜態(tài)代碼塊作用及執(zhí)行順序解析

    Java靜態(tài)代碼塊作用及執(zhí)行順序解析

    這篇文章主要介紹了Java靜態(tài)代碼塊作用及執(zhí)行順序解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)

    java中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava中循環(huán)遍歷刪除List和Set集合中元素的方法(推薦)。小編覺得挺不錯(cuò)的,在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • 到底如何設(shè)置Java線程池的大小的方法示例

    到底如何設(shè)置Java線程池的大小的方法示例

    在我們?nèi)粘I(yè)務(wù)開發(fā)過程中,或多或少都會(huì)用到并發(fā)的功能。那么并發(fā)線程池到底設(shè)置多大呢?文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringBoot過濾器與攔截器深入分析實(shí)現(xiàn)方法

    SpringBoot過濾器與攔截器深入分析實(shí)現(xiàn)方法

    大家應(yīng)該都曉得實(shí)現(xiàn)過濾器需要實(shí)現(xiàn) javax.servlet.Filter 接口,而攔截器會(huì)在處理指定請(qǐng)求之前和之后進(jìn)行相關(guān)操作,配置攔截器需要兩步,本文通過實(shí)例代碼給大家介紹SpringBoot 過濾器和攔截器的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-11-11
  • springboot前端傳參date類型后臺(tái)處理的方式

    springboot前端傳參date類型后臺(tái)處理的方式

    這篇文章主要介紹了springboot前端傳參date類型后臺(tái)處理的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java面試應(yīng)用上線后Cpu使用率飆升如何排查

    java面試應(yīng)用上線后Cpu使用率飆升如何排查

    這篇文章主要為大家介紹了java面試中應(yīng)用上線后Cpu使用率飆升如何排查的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • MybatisPlus使用Wrapper實(shí)現(xiàn)條件查詢功能

    MybatisPlus使用Wrapper實(shí)現(xiàn)條件查詢功能

    這篇文章主要介紹了MybatisPlus使用Wrapper實(shí)現(xiàn)查詢功能,使用它可以實(shí)現(xiàn)很多復(fù)雜的查詢,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論