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

SpringBoot調(diào)整ApplicationContextAware如何實現(xiàn)類加載順序

 更新時間:2023年05月26日 15:13:56   作者:windSnowLi  
SpringBoot調(diào)整ApplicationContextAware實現(xiàn)類加載順序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot調(diào)整ApplicationContextAware實現(xiàn)類加載順序

自己需要在項目中使用redis-cache插件,但是官方放出來的包太老了,倉庫代碼更新倒是還可以,所以打算自己封裝下,修改下加載配置文件的方式。

需求

有時候需要在普通類獲取到Bean,但是new出來的對象不會被注入,這時就需要通過SpringBoot上下文去獲取Bean,思路很簡單,實現(xiàn)ApplicationContextAware后在類上加個@Componse注解就可以很容易的實現(xiàn)加載上下文

例如:

@Component
public class SpringUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringUtils.applicationContext = applicationContext;
    }
    public static ApplicationContext getApplicationContext(){
        return applicationContext;
    }
    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }
}

思路很簡單,但是有個坑,有時使用到getBean的地方可能applicationContext還沒被注入,這時會報空指針錯誤,但是在測試中又能正確注入,很是惱火。

本機使用Ubuntu+IDEA開發(fā),由maven進行構(gòu)建,本地環(huán)境以及版本與目標環(huán)境一致,但是構(gòu)建出來的包(md5)不一樣,本地構(gòu)建出來的包可以在本地以及目標環(huán)境運行,但是直接在目標環(huán)境構(gòu)建的在哪都會報applicationContext空指針錯誤,可能某些潛在原因,導(dǎo)致編譯結(jié)果不一致,不過既然本地可以正常運行,那么肯定有解決辦法。

解決思路

通過調(diào)試發(fā)現(xiàn)使用getBean的地方比注入ApplicationContext要早,最終也會注入,所以解決思路就是讓需要ApplicationContext的類優(yōu)先加載。

解決辦法兩個

1.最簡單,但最奇葩

Bean工具類示例

@Component
public class SpringUtils implements ApplicationContextAware {
	// 還是老樣子
}

啟動類添加注解注解@DependsOn(value = "SpringUtils")

注:默認方式掃包必須保證SpringUtils在使用getBean文件的前邊,例如同一個包下SpringUtils文件排在了前遍

2.比較常規(guī)的

Bean工具類示例

@Component //實測這個沒有都行
public class SpringUtils implements ApplicationContextAware {
	// 還是老樣子
}

啟動類添加注解注解@Import(SpringUtils.class),并強依賴使用

···
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;
···
···
@Import(SpringUtils.class)
public class LBlogApplication {
		@Autowired
		public void setRedisConfigurationBuilder(RedisConfigurationBuilder redisConfigurationBuilder) {
	    	// 為了優(yōu)先加載
		}
		public static void main(String[] args) {
 	   		···
		}
}

ApplicationContextAware加載順序遇到的問題

公司使用的是自主研發(fā)的框架,類似ibatis,封裝可統(tǒng)一的list查詢接口,自定義SpringBeanFactory實現(xiàn)ApplicationContextAware獲取spring上下文對象。

問題

之前在mvc環(huán)境下使用一直沒有問題,最近切換成springboot框架,系統(tǒng)啟動時list接口類會調(diào)用SpringBeanFactory的getbean方法注入一個bean,發(fā)現(xiàn)SpringBeanFactory的set方法還沒有調(diào)用,就是系統(tǒng)還沒有掃描到SpringBeanFactory對象;

開始在list接口類上加@Lazy注解,調(diào)用到當前類時再初始化,可以解決當前問題,后期發(fā)現(xiàn)這個類還有靜態(tài)變量,其他地方要用到,如果沒有調(diào)到這個接口他的靜態(tài)變量使用是否會有問題?靜態(tài)代碼塊是否執(zhí)行?(時間問題,沒有測試)考慮到這些問題,決定不使用@Lazy注解,百度一下發(fā)現(xiàn)

@DependsOn(value = “springBeanFactory”)

可以解決這個問題。 

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Eclipse中實現(xiàn)JS代碼提示功能(圖文教程)

    Eclipse中實現(xiàn)JS代碼提示功能(圖文教程)

    本文通過圖文并茂的形式給大家介紹了Eclipse中實現(xiàn)JS代碼提示功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-11-11
  • Spring Boot通過Junit實現(xiàn)單元測試過程解析

    Spring Boot通過Junit實現(xiàn)單元測試過程解析

    這篇文章主要介紹了Spring Boot通過Junit實現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 編程語言榜單Java與Python并列第二!Julia下滑

    編程語言榜單Java與Python并列第二!Julia下滑

    日新月異的技術(shù)圈,隨著云、大數(shù)據(jù)、人工智能等主流技術(shù)的廣泛應(yīng)用,作為開發(fā)利器的編程語言的最新發(fā)展趨勢也在無形中發(fā)生了變化,本文主要介紹了java、Python、Julia等語言在Resmonk榜單的排名
    2021-08-08
  • spring-boot List轉(zhuǎn)Page的方法步驟

    spring-boot List轉(zhuǎn)Page的方法步驟

    這篇文章主要介紹了spring-boot List轉(zhuǎn)Page的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Spring?@EventListener?異步中使用condition的問題及處理

    Spring?@EventListener?異步中使用condition的問題及處理

    這篇文章主要介紹了Spring?@EventListener?異步中使用condition的問題及處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 使用BitSet位集合,一個重復(fù)校驗工具

    使用BitSet位集合,一個重復(fù)校驗工具

    這篇文章主要介紹了使用BitSet位集合,一個重復(fù)校驗工具,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • maven?scope?provided和runtime的例子說明

    maven?scope?provided和runtime的例子說明

    這篇文章主要介紹了maven?scope?provided和runtime的例子說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java模擬多線程http請求代碼分享

    java模擬多線程http請求代碼分享

    本篇文章給大家分享了java模擬多線程http請求的相關(guān)實例代碼,對此有需要的可以跟著測試下。
    2018-05-05
  • @RequestBody的使用案例代碼

    @RequestBody的使用案例代碼

    @RequestBody主要用來接收前端傳遞給后端的json字符串中的數(shù)據(jù)的,這篇文章主要介紹了@RequestBody的使用,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 解決idea check out 切換分支時找不到需要的分支問題

    解決idea check out 切換分支時找不到需要的分支問題

    這篇文章主要介紹了解決idea check out 切換分支時找不到需要的分支問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

盖州市| 吉水县| 房山区| 桃源县| 桦甸市| 涞水县| 布尔津县| 桐梓县| 汝州市| 韶山市| 涞水县| 定结县| 大姚县| 霍山县| 德江县| 全南县| 德格县| 大化| 安龙县| 红桥区| 昆山市| 徐闻县| 乡宁县| 任丘市| 邮箱| 于田县| 满洲里市| 嘉善县| 土默特左旗| 类乌齐县| 北流市| 汪清县| 虹口区| 张家川| 江孜县| 绥阳县| 浦城县| 肥乡县| 弥勒县| 四子王旗| 玉门市|