侧边栏壁纸
  • 累计撰写 47 篇文章
  • 累计创建 22 个标签
  • 累计收到 27 条评论

目 录CONTENT

文章目录

Spring Boot 中自动注入

vchopin
2022-06-22 / 0 评论 / 0 点赞 / 281 阅读 / 961 字

1. 问题起因

在完成Spring Boot的项目时,每次使用@AutoWired太麻烦了,如果一次忘记写,就容易出现null状态,甚至有时候写了仍然会出现null状态。有没有什么办法实现自动注入呢?

2. 解决办法

Springboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入。
原因:final修饰的成员变量是不能够被修改的,反射那就没办法在修改了。

spring代替 @Autowired(lombok相关注解) (前提:使用lombok)

@Service
//生成一个包含过所有字段的构造方法
//@AllArgsConstructor
//会将类的每一个final字段或者non-null字段生成一个构造方法 
@RequiredArgsConstructor
public class DashboardServiceImpl implements DashboardService {
  /* autowired没什么问题,但是有可能报错,iUserService为null,spring也不建议使用autowired */
  //@Autowired
  //private IUserService iUserService;    
  private final UserRepository userRepository;
  private final CallRepository callRepository;
  @PostMapping("/dashboard")
  public Result getAllPanelData() {
      //....
  }
}

注意:

  • @NoArgsConstructor后会 生成无参的构造方法
  • @RequiredArgsConstructor会将类的每一个final字段或者non-null字段生成一个构造方法
  • @AllArgsConstructor 生成一个包含过所有字段的构造方法。

在查找资料时,碰到其他人说不能用@AllArgsConstructor 注解,原因是使用@AllArgsConstructor后,@Value会失效,获取不到值。
所以以后在使用时,注意需要替代@Autowired但不需要所有字段全部装配时(部分需要手动修改或者懒赋值)最优雅的方案是使用@RequiredArgsConstructor配合final关键字。

0

评论区