我在项目中使用Spring 3.0.x.
我目前使用@Autowired
的做法示例如下:
@Autowired
private SomeType someMemberVariable;
更好和/或更喜欢使用setter方法吗?通过二传手,我的意思是:
private SomeType someMemberVariable;
@Autowired
private void setSomeMemberVariable(SomeType newValue)
{
someMemberVariable = newValue;
}
我理解可变与不可变的setter,这超出了这个问题的范围。
答案 0 :(得分:16)
我更喜欢使用setter和getter,因为当你在Spring上下文中没有运行它时,它允许你手动连接对象(即,在单元测试中设置模拟)。
答案 1 :(得分:15)
使用@Autowired
时我没有使用setter - 它会添加样板代码。
每当我需要在单元测试中设置依赖项时,我使用ReflectionTestUtils.setField(..)
- 作为setter它不是编译时安全的,但我没有遇到太多麻烦。
作为旁注,如果使用spring 3.0,您可以开始使用@Inject
代替@Autowired