dao对象不能使用注解@Repository实例化的情形之一
项目中定义一个dao对象,继承了 JdbcDaoSupport,在dao中使用getJdbcTemplate操作数据库,则在dao上添加@Repository注解,实例化失败
?
原因分析:
JdbcDaoSupport的父类DaoSupport继承了InitializingBean,在系统启动实例化dao时,会首先实例化JdbcDaoSupport,实例化后,执行立即检查dao配置,发现dataSource为null,则报错,dao实例化失败。
?
因为使用JdbcDaoSupport 的getJdbcTemplate得到的jdbcTemplate需要传入一个DataSource对象,因此必须重写JdbcDaoSupport的getDataSource()方法,把@Resource标记的dataSource传入进去,但是JdbcDaoSupport的此方法设置为final,因此不能传入dataSource。
?
如果dao继承JdbcTemplate,则可以传入dataSource
?
解决办法:
在spring.xml文件中配置此dao
?
<bean id="xxxDao" ref="dataSource"/>
?</bean>
?
另外,在spring.xml配置一个JdbcTemplate对象,然后把JdbcTemplate对象注入给JdbcDaoSupport,这样就可以使用@Repository,但是我得到了JdbcTemplate对象,还继承JdbcDaoSupport做什么?