Comment connecter automatiquement DataSource dans JdbcDaoSupport

Comment autowire DataSource dans JdbcDaoSupport

Une classe DAO simple étendJdbcDaoSupport, mais, incapable d'injecter ou de @autowired une «source de données», la méthodesetDataSource est finale, ne peut pas être remplacée.

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;
    }

}

Solution

Pour le corriger rapidement, utilise@PostConstruct pour injecter lesdataSource comme ceci:

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);
    }

}

Vous pouvez également créer une propre implémentation de la classeJdbcDaoSupport et faire ce que vous voulez. Plongez dans le code source deJdbcDaoSupport, c'est juste une simple classe d'aide pour créer unjdbcTemplate.

Note
Il y a unejira report sur Spring io, demande de suppression des modificateurs finaux, mais la résolution est «ne sera pas corrigée».