sPRing框架為我們代碼的編寫帶來了極大的便利,特別是注解的使用。但是有個問題,當(dāng)我們在靜態(tài)文件中使用注解的時候,這個時候就會報錯了。如以下代碼:
@Autowired private UserService userService;public static int test(User user){ return int i = userService.addUser(user);}如果這個是在一般的代碼里面運(yùn)行時沒有問題的,但是放在了靜態(tài)代碼塊里面就會出問題了。因為靜態(tài)代碼在項目啟動的時候就分配好了內(nèi)存,這時候里面的userService是沒有數(shù)據(jù)的。
為了解決這個問題,我們可以使用以下方式:
@Component//泛指組件,當(dāng)組件不好歸類的時候,我們可以使用這個注解進(jìn)行標(biāo)注public class FreezeUtil { @Autowired private UserService userService; private static FreezeUtil freezeUtil; @PostConstruct //@PostConstruct修飾的方法會在服務(wù)器加載Servle的時候運(yùn)行,并且只會被服務(wù)器執(zhí)行一次。PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行 public void init() { freezeUtil = this; freezeUtil.userService = this.userService; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } }
使用的時候如下:
public static int test(User user){ //注意是freezeUtil.userService而不是userService return int i = freezeUtil.userService.addUser(user); }新聞熱點(diǎn)
疑難解答