2014-03-26 58 views
0

我有一個奇怪的情況,同時自動裝配我的bean的屬性。 @Autowired put setter方法無法正常工作,並且當我嘗試訪問其某些方法時,與該設置器相對應的字段會返回NullPointerException。另一方面,@Autowired直接投入領域工作正常。@Autowired在一個領域和一個setter方法

這種行爲的原因是什麼?將@Autowired放在字段和字段的相應setter之間有什麼區別?

下面是摘自我的代碼:

private JdbcOperations jdbcTemplate; 

protected JdbcOperations getJdbcTemplate() { 
    return jdbcTemplate; 
} 

@Autowired 
@Qualifier("jdbcTemplate") 
public void setJdbcTemplate(JdbcOperations jdbcTemplate) { 
    this.jdbcTemplate = jdbcTemplate; 
} 

這裏是上下文:

<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <constructor-arg ref="routingDataSource"/> 
</bean> 

非常感謝你的解釋!

回答

1

如果它適用於領域,它也適用於setter。

http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation

最有可能你錯過了別的東西。您是否偶然使用關鍵字new創建了此類的實例,同時測試了setter注入?或者,在進行setter注射測試時,jdbcTemplate沒有出現在上下文中。有很多可能性...

+0

請更新您的鏈接。春天已經在版本4.0.2 + –

+0

謝謝Sotirios,更新到3.0.x.無法找到更新。 – isah

+1

您可以將'current'放置在URL的版本中,您將獲得最新版本。 –