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