在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對象,靜態存儲下來,防止被釋放。