Spring字段注入

结城 SpringBoot 7 次阅读 484 字 发布于 24 天前 预计阅读时间: 2 分钟


注:如果追求最简洁的方式,可以直接在需要注入的项目上使用注解@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();
    }
}
给时光以生命,给岁月以文明
最后更新于 2026-06-15