注:如果追求最简洁的方式,可以直接在需要注入的项目上使用注解
@RequiredArgsConstructor使用此注解只需要引用不可变私有变量,例如:
private final JwtTokenUserInterceptor jwtTokenUserInterceptor;
对于实际开发,非常不建议使用字段注入,有很大一部分原因是,字段注入虽然在IDEA中不会报错,依旧会成功代码高亮,但这种代码高亮是一个最基础的信息展示,标识这个字段可以被使用,但具体什么时候使用,在哪里使用,编译器并不知道。
字段注入的属性只有在执行的时候才会确定,编译器不能在静态代码的情况下知晓具体要做什么。
如果是采用构造器注入,那么系统在编译前就能知道那些地方使用了注入的字段,可以直接跟踪显示字段用法和报错,IDEA代码高亮会非常智能。
虽然字段注入在代码编写上可能更简洁,但它在可测试性、依赖关系管理、不可变性和代码可读性方面存在诸多问题。
因此,最佳实践是使用构造函数注入,它能够更好地表达类的依赖关系,提高代码的可测试性和可维护性。
尽量避免使用字段注入,优先选择构造函数注入。
曾经spring引以为傲的字段注入,在越来越规范发的软件开发流程前,也不得不让步。
字段注入 (不推荐):
@Component
public class MyService {
@Autowired
private MyRepository myRepository;
public void doSomething() {
// 使用 myRepository
myRepository.getData();
}
}
构造函数注入 (推荐):
@Component
public class MyService {
private final MyRepository myRepository;
@Autowired // 可以省略,从 Spring 4.3 开始,如果类只有一个构造函数,@Autowired 可以省略
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
public void doSomething() {
// 使用 myRepository
myRepository.getData();
}
}

Comments NOTHING