Spring中的AutoWired Setter而不是AutoWired实例变量

时间:2014-09-05 11:29:17

标签: java spring design-patterns inversion-of-control

我是使用Spring的Java团队的初级工程师。我们已经指导实例变量的Autowired Setters,而不是自动装配实际的实例变量。我有点困惑为什么我们这样做,这样做有什么好处,以及以这种方式处理依赖管理的可能不足?

1 个答案:

答案 0 :(得分:1)

我的一些观察结果(实际上是Java EE中的3年):

优点:

  • 您可以在setter方法中添加一些额外的验证或逻辑
  • 您可以避免在某些特殊情况下使用junit测试中的反射
  • 可以覆盖setter,因此你可以注入其他东西

缺点:

  • 在大多数情况下,此验证不是必需的,因为您正在注入其他服务
  • 你的代码中必须有很多无用的setter和getter。例如,在我的代码中,我通常使用每个服务大约5个DAO类,所以这是10个额外的写入方法,这给了我大约60个额外的行。
  • 在初始化应用程序后,大多数情况下您不需要注入另一个DAO或服务。
  • setter / getters以后不能使用,因为在Spring中你正在使用接口而不是具体的实现。在接口上设置setter和getter是一种不好的做法。

我个人更喜欢实例变量或构造函数注入。但这取决于服务。我不会说使用setter更好。它有不同的用途。