關(guān)于@Component注解下的類無法@Autowired問題
@Component注解下類無法@Autowired
這個(gè)問題心累
在把我的一個(gè)非Web程序遷移從Spring遷移到SpringBoot時(shí),出現(xiàn)了在@Component注解下@Autowired的類為null的情況,也就是沒注入成功,或者說是此類在bean加載之前就被調(diào)用了。
試了各種辦法,修改掃描包,修改@Component注解等等,皆未成功,后來看到了一個(gè)方法,探究了一下。
@Component public class ComponentClass { ? ? @Autowired ? ? private JedisClient jedisClient; ? ? public static ComponentClass componentClass; ? ? @PostConstruct ? ? public void init(){ ? ? ? ? componentClass = this; ? ? ? ? componentClass.jedisClient = this.jedisClient; ? ? } }
- 聲明一個(gè)此類的靜態(tài)變量,用以保存bean。
- 使用@PostConstruct注解,將需要注入的類添加到靜態(tài)變量中。
- 接下來,使用這個(gè)靜態(tài)變量來調(diào)用注入類就行了。
@PostConstruct這個(gè)注解的具體作用就是:
注解在方法上,表示此方法是在Spring實(shí)例化該bean之后馬上執(zhí)行此方法,之后才會(huì)去實(shí)例化其他bean。
這樣在Spring實(shí)例化ComponentClass之后,馬上執(zhí)行此方法,初始化ComponentClass靜態(tài)對(duì)象和成員變量jedisClient。
@Component注解下@Autowired報(bào)錯(cuò)
這是由于 Springboot Bean 的加載機(jī)制所導(dǎo)致的,具體大家可以去研究源碼。
下面是我的解決方案
僅供參考
@Component public class XxxConfig { // 1 public static XxxConfig xxxConfig ; @Resource private RedisUtil redisUtil; // 2 @PostConstruct public void init() { xxxConfig = this; xxxConfig.redisUtil = this.redisUtil; } public boolean test() { // 3.使用 jwtConfig.redisUtil 形式調(diào)用 return xxxConfig.redisUtil.set("abcd", "123456", 3600); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析
談到調(diào)優(yōu),這一定是針對(duì)特定場景、特定目的的事情, 對(duì)于 GC 調(diào)優(yōu)來說,首先就需要清楚調(diào)優(yōu)的目標(biāo)是什么?從性能的角度看,通常關(guān)注三個(gè)方面,內(nèi)存占用(footprint)、延時(shí)(latency)和吞吐量(throughput)2022-01-01IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼
這篇文章主要介紹了IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03SpringMVC中Invalid bound statement (not f
本文主要介紹了SpringMVC中Invalid bound statement (not found)常見報(bào)錯(cuò)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Java 實(shí)戰(zhàn)項(xiàng)目錘煉之IT設(shè)備固定資產(chǎn)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)IT設(shè)備固定資產(chǎn)管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)
本文主要介紹了Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì),使用Collections類配合HashMap來統(tǒng)計(jì)和java lamb 計(jì)算這兩種方式,具有一定的參考價(jià)值,感興趣可以了解一下2024-02-02Spring中的@ConditionalOnProperty作用和用法詳解
這篇文章主要介紹了Spring中的@ConditionalOnProperty作用和用法詳解,在spring boot中有時(shí)候需要控制配置類是否生效,可以使用@ConditionalOnProperty注解來控制@Configuration是否生效,需要的朋友可以參考下2023-11-11分享Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧
這篇文章主要分享的是Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧,OpenFeign?是?Spring?官方推出的一種聲明式服務(wù)調(diào)用和負(fù)載均衡組件,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-05-05Springboot實(shí)現(xiàn)多服務(wù)器session共享
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)多服務(wù)器session共享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05