Как автоматически подключить источник данных в JdbcDaoSupport

Как автоматически подключить источник данных в JdbcDaoSupport

Класс Simple DAO расширяетJdbcDaoSupport, но, не имея возможности внедрить или @autowired «источник данных», методsetDataSource является окончательным и не может быть отменен.

UserDetailsDaoImpl.java

package com.example.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.example.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 и делайте все, что хотите. Погрузитесь в исходный кодJdbcDaoSupport, это простой вспомогательный класс для созданияjdbcTemplate.

Note
В Spring io естьjira report, запрос на удаление модификаторов final, но разрешение «не исправить».