springboot 如何解決static調用service為null
springboot static調用service為null
@PostConstruct註解好多人以為是Spring提供的。其實是Java自己的註解。
Java中該註解的說明:
@PostConstruct該註解被用來修飾一個非靜態的void()方法。被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且隻會被服務器執行一次。PostConstruct在構造函數之後執行,init()方法之前執行。
通常我們會是在Spring框架中使用到@PostConstruct註解 該註解的方法在整個Bean初始化中的執行順序:
Constructor(構造方法) -> @Autowired(依賴註入) -> @PostConstruct(註釋的方法)
實戰:
在靜態方法中調用依賴註入的Bean中的方法。
@Component public class LeaveCode { @Autowired private IPlaLeaveApplyService plaLeaveApplyService; public static LeaveCode leaveCode; /** * 解決 static方法調用 註入的service為null */ @PostConstruct public void init(){ leaveCode = this; leaveCode.plaLeaveApplyService = this.plaLeaveApplyService; } }
SpringBoot 靜態類引入service 空指針/NULL
Spring註入service後,正常情況下非靜態方法是可以正常使用註冊的service的,當時用靜態類引用的時候,靜態類static方法會將spring註入的service清空。
造成引用空指針的情況,如何解決呢?
@Component public class UserUtils { @Autowired private UserService userService; private static UserUtils userUtils; @PostConstruct public void init() { userUtils = this; userUtils.userService = this.userService; } }
使用:
User user = userUtils.userService.getUser(loginCode);
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 解決springboot遇到autowire註入為null的問題
- Spring使用@Autowired註解靜態實例對象方式
- Spring boot 無法註入service問題
- SpringBoot在自定義類中調用service層等Spring其他層操作
- Spring Boot中單例類實現對象的註入方式