淺談@PostConstruct不被調用的原因
@PostConstruct不被調用的原因
如果在配置文件中配置使用,延遲加載的話
如圖
被@Service等註解的類,需要在註入使用的時候,才會被初始化.如果TableInit類隻是被定義而沒有在其他地方引用的話,@PostConstrut註釋的方法是不會執行的.
@PostConstruct詳解
定義
@PostContruct是Java自帶的註解,在方法上加該註解會在項目啟動的時候執行該方法,也可以理解為在spring容器初始化的時候執行該方法。
從Java EE5規范開始,Servlet中增加瞭兩個影響Servlet生命周期的註解,@PostConstruct和@PreDestroy,這兩個註解被用來修飾一個非靜態的void()方法。
用法
@PostConstruct public void someMethod(){}
或者
public @PostConstruct void someMethod(){}
作用
@PostConstruct註解的方法在項目啟動的時候執行這個方法,也可以理解為在spring容器啟動的時候執行,可作為一些數據的常規化加載,比如數據字典之類的。
執行順序
其實從依賴註入的字面意思就可以知道,要將對象p註入到對象a,那麼首先就必須得生成對象a和對象p,才能執行註入。所以,如果一個類A中有個成員變量p被@Autowried註解,那麼@Autowired註入是發生在A的構造方法執行完之後的。
如果想在生成對象時完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴註入,那麼久無法在構造函數中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴註入完成後被自動調用。
Constructor >> @Autowired >> @PostConstruct
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Spring boot 無法註入service問題
- springboot中項目啟動時實現初始化方法加載參數
- 解決springboot遇到autowire註入為null的問題
- springboot 如何解決static調用service為null
- Spring使用@Autowired註解靜態實例對象方式