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

Java使用@Autowired注解獲取對象為null的幾種情況及解決方法

 更新時間:2023年09月02日 14:56:59   作者:小孫的Blog  
這篇文章主要給大家介紹了使用@Autowired注解獲取對象為null的幾種情況以及?解決方法,文中有詳細的代碼示例講解,具有一定的參考價值,需要的朋友可以參考下

情況1:Bean對象并沒有交給Spring管理

  • 檢查@Autowired的對象是否已經(jīng)被注入到Spring容器中了;
  • 確保使用@Autowired注解的對象也已存在Spring的容器中。

情況2:對象使用過new關(guān)鍵字

這是我遇到的情況,當一個對象使用過關(guān)鍵new時,它是不能被Spring所管理的。

所以如果在這些對象中使用@Autowired去注入對象,得到的結(jié)果也是為null。

就比如我在項目中遇到的情況:

@Slf4j
@Component
public class MyCrawler extends WebCrawler {
	@Autowired
    private BookFeignService bookFeignSerivce;
    @Override
    public boolean shouldVisit(Page referringPage, WebURL url) {
		// ....
    }
    @Override
    public void visit(Page page) {
     	// ....
    }
}

該類繼承了一個WebCrawler,其實就是一個第三方框架,在我執(zhí)行某個功能的時候,這些被重寫的方法就會被其內(nèi)部自動調(diào)用。

在該類中使用@Autowired注入對象,就會看到注入的對象為null,盡管這些對象已經(jīng)在Spring容器中存在了。

主要原因就是因為該類繼承了一個第三方框架,在執(zhí)行的過程中,它是被人家框架內(nèi)部創(chuàng)建實例然后去調(diào)用的,這就導(dǎo)致了可能在內(nèi)部new過這個對象了,所以就導(dǎo)致了@Component對這個類根本不起作用。

解決方法

那么,如果我們非要在該類中獲取到Spring容器中的對象,應(yīng)該怎么辦?
寫一個工具類:

@Component
public class MyBeanUtil implements ApplicationContextAware {
    protected static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext app) throws BeansException {
        if (applicationContext == null) {
            applicationContext = app;
        }
    }
    /**
     * 通過類的class從容器中手動獲取對象
     */
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }
}

通過getBean這個方法就可以獲取到Spring容器中的對象了。

注意:該類一定要加@Component注解。

到此這篇關(guān)于Java使用@Autowired注解獲取對象為null的幾種情況及解決方法的文章就介紹到這了,更多相關(guān)Java @Autowired獲取對象為null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于ssm中dao接口@Param注解的用法

    基于ssm中dao接口@Param注解的用法

    這篇文章主要介紹了基于ssm中dao接口@Param注解的用法,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • spring boot使用sharding jdbc的配置方式

    spring boot使用sharding jdbc的配置方式

    這篇文章主要介紹了spring boot使用sharding jdbc的配置方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java解析xml的四種方法匯總

    Java解析xml的四種方法匯總

    XML在不同的語言里解析方式都是一樣的,只不過實現(xiàn)的語法不同而已。java中基本的解析方式有四種,DOM解析、sax解析、JDOM解析和DOM4J解析,下面我們就來詳細探討下這四種方式
    2016-05-05
  • SpringMVC?bean實現(xiàn)加載控制方法詳解

    SpringMVC?bean實現(xiàn)加載控制方法詳解

    SpringMVC是一種基于Java,實現(xiàn)了Web?MVC設(shè)計模式,請求驅(qū)動類型的輕量級Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進行職責解耦?;谡埱篁?qū)動指的就是使用請求-響應(yīng)模型,框架的目的就是幫助我們簡化開發(fā),SpringMVC也是要簡化我們?nèi)粘eb開發(fā)
    2022-08-08
  • Java中的同步非阻塞IO模型詳解

    Java中的同步非阻塞IO模型詳解

    這篇文章主要介紹了Java中的同步非阻塞IO模型詳解,同步非阻塞IO模型,我們能夠知道,用戶線程一直發(fā)送請求,內(nèi)核一直都能都夠返回 ,直到內(nèi)核完成準備數(shù)據(jù)、數(shù)據(jù)拷貝的工作,并且返回成功的指示,在此過程中用戶線程不是阻塞的狀態(tài),需要的朋友可以參考下
    2024-01-01
  • 解析如何用兩個棧來實現(xiàn)隊列的方法

    解析如何用兩個棧來實現(xiàn)隊列的方法

    本篇文章是對如何用兩個棧實現(xiàn)隊列的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項

    IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項

    由于GeoServer是基于Java開發(fā)的。因此在安裝之前,必須確保安裝了Java。本文給大家分享IDEA導(dǎo)入geoserver項目的詳細步驟及注意事項,感興趣的朋友一起看看吧
    2021-06-06
  • 使用MapStruct進行Java Bean映射的方式

    使用MapStruct進行Java Bean映射的方式

    MapStruct是一個用于JavaBean映射的注解處理器,它通過注解生成類型安全且性能優(yōu)異的映射代碼,避免手動編寫重復(fù)的樣板代碼,主要特性包括類型安全、高性能、簡潔和可定制性,使用步驟包括定義映射接口、創(chuàng)建源類和目標類、生成映射代碼并調(diào)用映射方法
    2025-02-02
  • Eclipse中配置Maven build打包的方法步驟

    Eclipse中配置Maven build打包的方法步驟

    這篇文章主要介紹了Eclipse中配置Maven build打包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • SpringBoot 統(tǒng)一公共返回類的實現(xiàn)

    SpringBoot 統(tǒng)一公共返回類的實現(xiàn)

    本文主要介紹了SpringBoot 統(tǒng)一公共返回類的實現(xiàn),配置后臺的統(tǒng)一公共返回類,這樣做目的是為了統(tǒng)一返回信息,文中示例代碼介紹的很詳細,感興趣的可以了解一下
    2022-01-01

最新評論

佛冈县| 沁水县| 历史| 古浪县| 梧州市| 财经| 安徽省| 泸水县| 寿阳县| 孟州市| 嘉鱼县| 松潘县| 富源县| 托克逊县| 青州市| 安多县| 民勤县| 壤塘县| 平昌县| 会理县| 兴仁县| 思茅市| 永兴县| 临武县| 祁东县| 射阳县| 玉环县| 扎赉特旗| 东宁县| 叶城县| 锡林浩特市| 巴楚县| 嘉义县| 信宜市| 东台市| 耿马| 石渠县| 如皋市| 高尔夫| 渝北区| 绥滨县|