一个简单的DAO类扩展了JdbcDaoSupport
,但是,由于无法注入或@autowired一个“ dataSource”,因此setDataSource
方法是最终的,无法覆盖。
UserDetailsDaoImpl.java
package com.mkyong.users.dao;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
@Repository
public class UserDetailsDaoImpl extends JdbcDaoSupport implements UserDetailsDao {
//Error, cannot override the final method from JdbcDaoSupport
@Autowired
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
解
为了快速修复它,请使用@PostConstruct
像这样注入dataSource
:
UserDetailsDaoImpl.java
package com.mkyong.users.dao;
import javax.sql.DataSource;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
@Repository
public class UserDetailsDaoImpl extends JdbcDaoSupport implements UserDetailsDao {
@Autowired
private DataSource dataSource;
@PostConstruct
private void initialize() {
setDataSource(dataSource);
}
}
或者,创建自己的JdbcDaoSupport
类的实现,然后执行所需的任何操作。 jdbcTemplate
研究JdbcDaoSupport
的源代码,它只是创建jdbcTemplate
的简单帮助程序类。
注意
关于Spring io有一份jira报告 ,要求删除最终修饰符,但解决方案“无法解决”。
翻译自: https://mkyong.com/spring/how-to-autowire-datasource-in-jdbcdaosupport/