關(guān)于@Component注解下的類無法@Autowired問題
@Component注解下類無法@Autowired
這個問題心累
在把我的一個非Web程序遷移從Spring遷移到SpringBoot時,出現(xiàn)了在@Component注解下@Autowired的類為null的情況,也就是沒注入成功,或者說是此類在bean加載之前就被調(diào)用了。
試了各種辦法,修改掃描包,修改@Component注解等等,皆未成功,后來看到了一個方法,探究了一下。
@Component
public class ComponentClass {
? ? @Autowired
? ? private JedisClient jedisClient;
? ? public static ComponentClass componentClass;
? ? @PostConstruct
? ? public void init(){
? ? ? ? componentClass = this;
? ? ? ? componentClass.jedisClient = this.jedisClient;
? ? }
}- 聲明一個此類的靜態(tài)變量,用以保存bean。
- 使用@PostConstruct注解,將需要注入的類添加到靜態(tài)變量中。
- 接下來,使用這個靜態(tài)變量來調(diào)用注入類就行了。
@PostConstruct這個注解的具體作用就是:
注解在方法上,表示此方法是在Spring實例化該bean之后馬上執(zhí)行此方法,之后才會去實例化其他bean。
這樣在Spring實例化ComponentClass之后,馬上執(zhí)行此方法,初始化ComponentClass靜態(tài)對象和成員變量jedisClient。
@Component注解下@Autowired報錯
這是由于 Springboot Bean 的加載機制所導(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);
}
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Jenkins Pipeline自動化構(gòu)建發(fā)布Java項目的方法
這篇文章主要介紹了使用Jenkins Pipeline自動化構(gòu)建發(fā)布Java項目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
基于springMvc+hibernate的web application的構(gòu)建
下面小編就為大家?guī)硪黄趕pringMvc+hibernate的web application的構(gòu)建。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
SpringBoot實現(xiàn)動態(tài)配置及項目打包部署上線功能
本文講解的是如何使用Spring動態(tài)配置文件,實現(xiàn)不同環(huán)境不同配置,靈活切換配置文件;以及講述了如何使用?Maven?打包,然后上傳至Linux服務(wù)器進行部署,對SpringBoot打包部署上線過程感興趣的朋友一起看看吧2022-10-10

