關(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)文章
使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法
這篇文章主要介紹了使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
java常用Lambda表達(dá)式使用場(chǎng)景源碼示例
這篇文章主要為大家介紹了java常用Lambda表達(dá)式使用場(chǎng)景源碼示例及應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
基于springMvc+hibernate的web application的構(gòu)建
下面小編就為大家?guī)硪黄趕pringMvc+hibernate的web application的構(gòu)建。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
SpringBoot模擬實(shí)現(xiàn)流式輸出效果
這篇文章主要為大家詳細(xì)介紹了如何使用SpringBoot模擬實(shí)現(xiàn)流式輸出效果,并在前端使用流式接收數(shù)據(jù)并打印,感興趣的小伙伴可以參考一下2025-03-03
SpringBoot實(shí)現(xiàn)動(dòng)態(tài)配置及項(xiàng)目打包部署上線功能
本文講解的是如何使用Spring動(dòng)態(tài)配置文件,實(shí)現(xiàn)不同環(huán)境不同配置,靈活切換配置文件;以及講述了如何使用?Maven?打包,然后上傳至Linux服務(wù)器進(jìn)行部署,對(duì)SpringBoot打包部署上線過程感興趣的朋友一起看看吧2022-10-10

