JdbcDaoSupportでDataSourceをオートワイヤリングする方法
シンプルなDAOクラスは
JdbcDaoSupport`を拡張していますが、
dataSource`を注入することはできませんし、 `setDataSource`メソッドはfinalでオーバーライドできません。
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`クラスの独自の実装を作成し、必要な処理を行います。 `JdbcDaoSupport`のソースコード内でダイブすると、
jdbcTemplate`を作成するだけの簡単なヘルパークラスです。