Spring 不推荐使用 @Autowired 字段注入的原因是什么? 应该怎么使用?

Spring框架中,虽然@Autowired可以用于字段注入,但是并不推荐这种用法。主要原因有以下几点:

  1. 测试难度:使用字段注入,会使得在不使用Spring容器的情况下,比如单元测试时,很难为这些依赖注入模拟的实现。

  2. 不可变性:如果使用构造器注入,你的依赖可以是final的,这样就可以保证它们的不可变性。而字段注入无法做到这一点。

  3. 依赖隐藏:字段注入可能会隐藏类的依赖,使得依赖关系不清晰。当一个类有很多字段注入时,很难一眼就看出这个类都依赖哪些其他的类或者组件。

因此,Spring推荐使用构造器注入。这样做的好处是,你可以清楚地看到该类的依赖关系(通过构造函数的参数),并且这些依赖可以是final的,保证了它们的不可变性。此外,使用构造器注入,可以更容易地在不使用Spring容器的情况下,比如进行单元测试时,为这些依赖提供模拟的实现。

以下是使用构造器注入的例子:

@Service
public class MyService {

    private final MyDao myDao;

    @Autowired
    public MyService(MyDao myDao) {
        this.myDao = myDao;
    }

    //...
}

在这个例子中,MyService依赖于MyDao,并且这个依赖关系是通过构造器注入实现的。这样,我们就可以很清楚地看到MyService的依赖,并且这个依赖是final的,保证了它的不可变性。

发表评论

后才能评论