解決Spring框架的Dao層改用@Repository註解,無法使用JdbcDaoSupport的問題

目的:
想改用Spring框架強大的註解功能(@Repository註解)來實現自動註冊dao的bean的功能(原來是在xml中配置的)。改完之後,運行的時候直接報錯:

Error creating bean with name 'UserVODao' defined in file 
[D:\JSP_MyEclipse\.metadata\.me_tcat7\webapps\XYG_WEBDEV_SAMPLE\WEB-INF\classes\com\xinyiglass\springSample\dao\impl\UserVODaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required

接着就是想着如何解決問題。網上找了一些資料,結合自己的理解,報錯的原因是:修改之後,XML裏面配置的DataSource就無法被Spring容器主動注入到dao裏面!從而在初始化dao(此dao有繼承了JdbcDaoSupport類)的bean的時候,如果獲取不到DataSource或者JdbcTemplate的話,會報錯:無法找到數據源。

備註:沒修改之前,是用xml配置主動注入的:

<bean id="UserVODao" class="com.xinyiglass.springSample.dao.impl.UserVODaoImpl" parent="abstractDao"/>
<bean id="abstractDao" abstract="true"><property name="dataSource" ref="dataSource"/></bean>

網上找了幾個文章,寫得不錯:
JdbcDaoSupport和Spring註解的轉換 http://www.verydemo.com/demo_c143_i2948.html
Spring中JdbcDaoSupport的DataSource注入問題 http://www.tuicool.com/articles/JZnqIb
@Repository 不能直接用的解析 http://splinter-2.iteye.com/blog/1069765
用@Repository的一個實例:http://blog.csdn.net/show_me_the_world/article/details/47055841

最後,還是得在國外的一個網站中找到了解決辦法!!百度了1個多小時,在國內的博客找了一遍都找不到我想要的解決辦法。
http://www.mkyong.com/spring/how-to-autowire-datasource-in-jdbcdaosupport/
http://stackoverflow.com/questions/10570521/spring3-annotation-jdbcdaosupport
注意:搜索關鍵字:JdbcDaoSupport @Repository

附上最終的解決辦法:
方法1:最簡潔,用重寫類構造函數的辦法自動裝配daoSupport需要用到的數據源!

@Autowired
    UserVODaoImpl(DataSource dataSource) {
        setDataSource(dataSource);
    }

方法2:也是差不多,初始化的時候自動裝配數據源。

    @Autowired
    private DataSource dataSource;

    @PostConstruct
    private void initialize() {
        setDataSource(dataSource);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章