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