關(guān)于@Component注解下的類無(wú)法@Autowired問(wèn)題
@Component注解下類無(wú)法@Autowired
這個(gè)問(wèn)題心累
在把我的一個(gè)非Web程序遷移從Spring遷移到SpringBoot時(shí),出現(xiàn)了在@Component注解下@Autowired的類為null的情況,也就是沒(méi)注入成功,或者說(shuō)是此類在bean加載之前就被調(diào)用了。
試了各種辦法,修改掃描包,修改@Component注解等等,皆未成功,后來(lái)看到了一個(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)變量中。
- 接下來(lái),使用這個(gè)靜態(tài)變量來(lá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ì)特定場(chǎng)景、特定目的的事情, 對(duì)于 GC 調(diào)優(yōu)來(lái)說(shuō),首先就需要清楚調(diào)優(yōu)的目標(biāo)是什么?從性能的角度看,通常關(guān)注三個(gè)方面,內(nèi)存占用(footprint)、延時(shí)(latency)和吞吐量(throughput)2022-01-01
IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼
這篇文章主要介紹了IDEA:Git stash 暫存分支修改的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
SpringMVC中Invalid bound statement (not f
本文主要介紹了SpringMVC中Invalid bound statement (not found)常見(jiàn)報(bào)錯(cuò)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之IT設(shè)備固定資產(chǎn)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)IT設(shè)備固定資產(chǎn)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)
本文主要介紹了Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì),使用Collections類配合HashMap來(lái)統(tǒng)計(jì)和java lamb 計(jì)算這兩種方式,具有一定的參考價(jià)值,感興趣可以了解一下2024-02-02
Spring中的@ConditionalOnProperty作用和用法詳解
這篇文章主要介紹了Spring中的@ConditionalOnProperty作用和用法詳解,在spring boot中有時(shí)候需要控制配置類是否生效,可以使用@ConditionalOnProperty注解來(lái)控制@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-05
Springboot實(shí)現(xiàn)多服務(wù)器session共享
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)多服務(wù)器session共享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

