springboot 如何解決static調(diào)用service為null
@PostConstruct注解好多人以為是Spring提供的。其實(shí)是Java自己的注解。
Java中該注解的說(shuō)明:@PostConstruct該注解被用來(lái)修飾一個(gè)非靜態(tài)的void()方法。被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器執(zhí)行一次。PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行。
通常我們會(huì)是在Spring框架中使用到@PostConstruct注解 該注解的方法在整個(gè)Bean初始化中的執(zhí)行順序:
Constructor(構(gòu)造方法) -> @Autowired(依賴(lài)注入) -> @PostConstruct(注釋的方法)
實(shí)戰(zhàn):
在靜態(tài)方法中調(diào)用依賴(lài)注入的Bean中的方法。
@Componentpublic class LeaveCode { @Autowired private IPlaLeaveApplyService plaLeaveApplyService; public static LeaveCode leaveCode; /** * 解決 static方法調(diào)用 注入的service為null */ @PostConstruct public void init(){leaveCode = this;leaveCode.plaLeaveApplyService = this.plaLeaveApplyService; } }SpringBoot 靜態(tài)類(lèi)引入service 空指針/NULL
Spring注入service后,正常情況下非靜態(tài)方法是可以正常使用注冊(cè)的service的,當(dāng)時(shí)用靜態(tài)類(lèi)引用的時(shí)候,靜態(tài)類(lèi)static方法會(huì)將spring注入的service清空。
造成引用空指針的情況,如何解決呢?@Componentpublic 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);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 基于javaweb+jsp實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)2. 多級(jí)聯(lián)動(dòng)下拉選擇框,動(dòng)態(tài)獲取下一級(jí)3. 如何封裝一個(gè)Ajax函數(shù)4. ASP.NET MVC實(shí)現(xiàn)樹(shù)形導(dǎo)航菜單5. Spring security 自定義過(guò)濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)6. Django模板之基本的 for 循環(huán) 和 List內(nèi)容的顯示方式7. PHP擴(kuò)展之URL編碼、解碼及解析——URLs8. Laravel Eloquent ORM高級(jí)部分解析9. Java 接口和抽象類(lèi)的區(qū)別詳解10. Ajax常用封裝庫(kù)——Axios的使用
