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。

推薦閱讀: