我应该为@Autowired提供一个setter

DwB*_*DwB 12 java spring

我正在使用Spring 3.0.x和我的项目.我目前的做法@Autowired如下:


 @Autowired
 private SomeType someMemberVariable;

更好和/或更喜欢使用setter方法吗?通过二传手,我的意思是:


 private SomeType someMemberVariable;

 @Autowired
 private void setSomeMemberVariable(SomeType newValue)
 {
  someMemberVariable = newValue;
 }

我理解可变的vs不可变的setter,这超出了这个问题的范围.

Kal*_*see 16

我更喜欢使用setter和getter,因为它允许你在Spring上下文中没有运行它时手动连接对象(即,在单元测试中设置模拟).


Boz*_*zho 15

我在使用时没有使用setter @Autowired- 它添加了样板代码.

每当我需要在单元测试中设置依赖项时,我使用ReflectionTestUtils.setField(..)- 它不是编译时安全的setter,但我没有遇到太多麻烦.

作为旁注,如果使用spring 3.0,您可以开始使用@Inject而不是@Autowired

  • 我怀疑 @Inject 仅适用于 Java 6.0 及更高版本。如果仍在使用 Java 5.0(可能是因为您使用的是 WAS 6.1),@Autowired 是最佳选择。 (2认同)