How to autowire DataSource in JdbcDaoSupport
By:Roy.LiuLast updated:2019-08-17
A Simple DAO class extends JdbcDaoSupport, but, unable to inject or @autowired a “dataSource”, the method setDataSource is final, can’t override.
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;
Solution
To quickly fix it, uses @PostConstruct to inject the dataSource like this :
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);
Alternatively, create an own implementation of JdbcDaoSupport class, and do whatever you want. Dive inside the source code of JdbcDaoSupport, it’s just a simple helper class to create a jdbcTemplate.
Note
There is a jira report on Spring io, request to remove final modifiers, but the resolution is “won’t fix”.
There is a jira report on Spring io, request to remove final modifiers, but the resolution is “won’t fix”.
From:一号门

COMMENTS