我应该为@Autowired提供一个setter

时间:2010-11-10 18:01:04

标签: java spring

我在项目中使用Spring 3.0.x. 我目前使用@Autowired的做法示例如下:


 @Autowired
 private SomeType someMemberVariable;

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


 private SomeType someMemberVariable;

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

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

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:15)

使用@Autowired时我没有使用setter - 它会添加样板代码。

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

作为旁注,如果使用spring 3.0,您可以开始使用@Inject代替@Autowired