https://docs.spring.io/spring-framework/docs/5.3.25/reference/html/core.html#spring-core

The Spring team generally advocates constructor injection, as it lets you implement application components as immutable objects and ensures that required dependencies are not null. Furthermore, constructor-injected components are always returned to the client (calling) code in a fully initialized state. As a side note, a large number of constructor arguments is a bad code smell, implying that the class likely has too many responsibilities and should

技术角度上说,依赖注入可以有field注入,setter注入方式和构造函数注入方式。技术角度上看,构造函数的优势在于保证返回的bean是完整的,且bean中依赖的其他类不为空。

然而在实际生产过程中,spring官方给的技术优势大部分开发并不关注,还是直接写一个域然后标一个autowired。

滥用依赖注入,导致一个bean中能注入十几个几十个bean,把依赖注入当作import导入来使用,这样长久下去的代价就是代码不可维护,冗长以及不可测试!

一个没有显示构造函数却有大量域的类,如何测试?仅仅是想测试其中的一小部分内容,就得手动注入或者mock十几个bean,哪怕控制这些bean为null,还是需要对多达十几个外部依赖进行管理,光是理解潘清哪些依赖不会被使用就已经很麻烦了。

依赖注入本身是用来进行接耦合的好思想,却被滥用导致项目强耦合。所以,必须使用构造函数进行自动注入。不可能有一个类必须在构造函数中放十几个参数才能构造,那一定是设计出了问题。