Как автоматически подключить источник данных в 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, но разрешение «не исправить».