2010-11-10 19 views
13

我正在使用Spring 3.0.x和我的项目。 我与@Autowired当前实践示例如下:我应该为@Autowired提供一个setter吗?

 

@Autowired 
private SomeType someMemberVariable; 
 

是对使用一个setter方法的更好和/或优选的?通过二传手,我指的是以下几点:

 

private SomeType someMemberVariable; 

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

我明白可变VS不变的制定者,这是超出范围了这个问题。

回答

15

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

每当我需要在单元测试中设置依赖关系时,我使用ReflectionTestUtils.setField(..) - 它不像编译器那样安全,但我没有太多麻烦。

一点题外话,如果用弹簧3.0,就可以开始使用的,而不是@Inject@Autowired

+1

我怀疑@Inject仅适用于Java的6.0及更高版本。如果仍然使用Java 5.0(也许是因为您使用的是WAS 6.1),那么@Autowired就是要走的路。 – DwB 2010-11-11 14:04:46

+0

@Inject会在类路径上有效。你可以从这里得到它https://code.google.com/p/atinject/我在tomcat上使用它。 – Bozho 2010-11-11 14:06:54

+0

为什么'@Inject'通过'@ Autowired'?任何参考? – DerekY 2016-01-12 05:51:58

16

我更喜欢使用setter和getters,因为它允许您在Spring环境中运行对象(即在单元测试中设置mocks)时手动连接对象。

相关问题