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" class="XxxDao">
  <property name="dataSource" ref="dataSource"/>
 </bean>

 

另外,在spring.xml配置一个JdbcTemplate对象,然后把JdbcTemplate对象注入给JdbcDaoSupport,这样就可以使用@Repository,但是我得到了JdbcTemplate对象,还继承JdbcDaoSupport做什么?

你可能感兴趣的:(DAO,spring,bean,xml)