Spring中没有arg构造函数否定了基于构造函数的DI优势

时间:2018-03-05 17:53:24

标签: java spring spring-boot

根据Spring bean的定义,POJO应该没有-arg构造函数。 考虑到基于构造函数的DI的好处,其中通过查看构造函数本身,我们知道它的依赖性是什么,没有没有arg构造函数会消除这种优势。

1 个答案:

答案 0 :(得分:3)

马匹课程

基于构造函数的依赖注入更具预测性,并创建不可变的,完全初始化的对象。基于Setter的DI用于被认为是可选的依赖项,但也允许在稍后阶段进一步重新配置对象。两者都有效,两者都有权衡,因此两者都被广泛使用。

来自Spring documentation(参见基于构造函数或基于setter的DI?框):

  

Spring团队通常提倡构造函数注入,因为它可以将应用程序组件实现为不可变对象,并确保所需的依赖项不为null。此外,构造函数注入的组件始终以完全初始化的状态返回到客户端(调用)代码。作为旁注,大量的构造函数参数是一个糟糕的代码味道,暗示该类可能有太多的责任,应该重构以更好地解决关注点的正确分离。

     

Setter injection 应主要仅用于可选依赖项,可在类中指定合理的默认值。否则,非空检查必须在任何地方执行代码使用依赖项。 setter注入的一个好处是setter方法使该类的对象可以在以后重新配置或重新注入

(重点是我的)

相关问题