SpringBoot在Impl類中調用其它service層失敗解決辦法


在AImpl.java文件中引用BImpl.java的方法,編譯正常,運行到調用的地方,報空指針異常,跟蹤到異常位置,發現service為空,也就是按照之前controller層通過@Autowired注入service層失效。 

解決辦法:

在AImpl.java類中添加標紅代碼:

@Component
public class AImpl {

@Autowired
protected SequenceClient sequenceClient;

private static SequenceImpl sequenceimpl;

@PostConstruct //通過@PostConstruct實現初始化bean之前進行的操作
public void init() {
sequenceimpl = this;
sequenceimpl.sequenceClient = this.sequenceClient;
}

原理:

1.將需要調用Spring的Service層的類通過@Component注解為組件加載;
2.同樣通過@Autowired獲取Service層的Bean對象;
3.為類聲明一個靜態變量,方便下一步存儲bean對象;
4.通過注解@PostConstruct ,在初始化的時候初始化靜態對象和它的靜態成員變量sequenceClient,原理是拿到service層bean對象,靜態存儲下來,防止被釋放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM