@AllArgsConstructor和final 代替 @Autowired
Springboot官方建議使用final來修飾成員變量,然后通過構造方法來進行注入原因:final修飾的成員變量是不能夠被修改的,反射那就沒辦法了。
spring代替 @Autowired(lombok相關注解)
前提:使用lombok
@Slf4j @RestController //生成一個包含過所有字段的構造方法 //@AllArgsConstructor //會將類的每一個final字段或者non-null字段生成一個構造方法 @RequiredArgsConstructor public class AdminUserController { /* autowired沒什么問題,但是有可能報錯,iUserService為null,spring也不建議使用autowired */ //@Autowired //private IUserService iUserService; private final IUserService iUserService; @PostMapping("/login") public Result adminLogin(HttpServletResponse response, String username,String password) { //.... } }
注解
-
@NoArgsConstructor
后會 生成無參的構造方法 -
@RequiredArgsConstructor
會將類的每一個final字段或者non-null字段生成一個構造方法 -
@AllArgsConstructor
生成一個包含過所有字段的構造方法。
@AllArgsConstructor 和@RequiredArgsConstructor都可以用來替換@Autowired寫法,區別在@RequiredArgsConstructor必須要有final修飾。
遇到坑
使用@AllArgsConstructor后,@Value會失效,獲取不到值。使用@RequiredArgsConstructor則正常。今后注入service、mapper等都使用@RequiredArgsConstructor好了。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/weixin_43834415/article/details/109738068