Posted on 2011-08-26 08:57
云自無心水自閑 閱讀(3860)
評論(0) 編輯 收藏 所屬分類:
Java 、
心得體會 、
Spring
在applicationContext.xml中定義了一個DataSource:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" />
但是在代碼中,使用anotation進(jìn)行注入的時候,卻總是找不到這個dataSource.
@Autowired
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcInsert = new SimpleJdbcInsert(dataSource);
}
最后終于想明白了,原因大概是這樣的,使用autowired的時候,默認(rèn)是根據(jù)類型來匹配的,在xml中定義的類型是:BasicDataSource,而不是接口DataSource,所以默認(rèn)情況下這樣是無法自動裝配的。解決辦法是指令使用名字來進(jìn)行bean的匹配,也就是用Qualifier指定bean的id.
@Autowired
public void setDataSource(@Qualifier("dataSource") DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcInsert = new SimpleJdbcInsert(dataSource);
}
另外一點(diǎn),在網(wǎng)上搜索的過程中發(fā)現(xiàn)有不少人都有類似的問題,但是他們的原因是沒有正確使用spring的注入,而是自己在代碼中new了一個Dao的實(shí)例,這樣的話,spring是無法將dataSource注入到dao的實(shí)例中的