Spring 与常规自动布线或属性自动布线相比,构造函数自动布线有哪些优点?

Spring 与常规自动布线或属性自动布线相比,构造函数自动布线有哪些优点?,spring,spring-boot,Spring,Spring Boot,与属性自动关联相比,构造函数自动关联有什么特殊的优势吗。。。还是普通的。?高级强制团队在spring boot中使用构造函数自动连线。。这有什么特别的好处吗。这两种类型的自动连接的优缺点构造函数自动连接的优点在于,您可以将wired in字段设置为final(如果您的bean将从多个线程调用,则特别有用,因为threadsafety更容易用final进行分析)。而且,您可以确保bean始终以有效的方式构造(尽管您始终可以实现初始化bean,并在连接属性时使用afterPropertiesSet方

与属性自动关联相比,构造函数自动关联有什么特殊的优势吗。。。还是普通的。?高级强制团队在spring boot中使用构造函数自动连线。。这有什么特别的好处吗。这两种类型的自动连接的优缺点构造函数自动连接的优点在于,您可以将wired in字段设置为final(如果您的bean将从多个线程调用,则特别有用,因为threadsafety更容易用final进行分析)。而且,您可以确保bean始终以有效的方式构造(尽管您始终可以实现
初始化bean
,并在连接属性时使用
afterPropertiesSet
方法来实现相同的构造)

如果您有许多字段,那么连接属性会更好,因为它避免了构造函数中有很多参数,并且如果您使用xml,按名称连接不太容易混淆变量(考虑一个具有多个参数的构造函数,所有参数都是同一种类型-很容易连接到错误的变量)。连接属性也使得拥有可选属性变得更容易——具有构造函数连接的可选属性需要多个构造函数,这可能会很快变得复杂


总之,这两种方法都有其优缺点——我们通常使用属性连接,除非有特别的原因我们应该使用构造函数连接。

构造函数连接也有助于编写无错误代码。如果您通过构造函数自动连接来连接依赖项,那么您将能够使用模拟框架轻松模拟它们,并通过构造函数注入它们

具体地说,Mockito在模拟依赖项时会无声地失败,如果您没有使用构造函数自动连接,那么在代码中断的地方就很难进行调试


如果您遵循TDD编写大型企业应用程序,构造函数自动连接是很有帮助的。

其中之一是,在测试时,对构造函数进行模拟很容易,但对属性进行模拟则有点困难经验法则:坚持构造函数注入。为什么?构造函数指定实例化的类所需的依赖项。另一方面,对于setter/field注入,您总是必须查找它们(通过查看源代码)。您可能会遇到麻烦(例如NPE),因为实例缺少一些必需的依赖项。看一看谢谢你的回复。。使用构造器自动连线会有什么缺点吗?可能是@benny的复制品我不知道。它实际上屏蔽了连接循环依赖项(setter/field injection不是这种情况)。不同意
如果您有许多字段,则连接属性会更好…
。这通常是一种代码气味的迹象,因为类可能有太多的职责。