JdbcDaoSupportでDataSourceをオートワイヤリングする方法

JdbcDaoSupportでDataSourceを自動接続する方法

Simple DAOクラスはJdbcDaoSupportを拡張しますが、「dataSource」を挿入または@autowiredできないため、メソッドsetDataSourceはfinalであり、オーバーライドできません。

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があり、最終修飾子を削除するように要求しますが、解決策は「修正されません」です。