So verdrahten Sie DataSource automatisch in JdbcDaoSupport
Eine einfache DAO-Klasse erweitertJdbcDaoSupport
, aber da keine "dataSource" eingefügt oder @autowired ist, ist die MethodesetDataSource
endgültig und kann nicht überschrieben werden.
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; } }
Lösung
Um dies schnell zu beheben, werden@PostConstruct
verwendet, umdataSource
wie folgt zu injizieren:
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); } }
Alternativ können Sie eine eigene Implementierung der KlasseJdbcDaoSupport
erstellen und alles tun, was Sie wollen. Tauchen Sie in den Quellcode vonJdbcDaoSupport
ein. Es ist nur eine einfache Hilfsklasse, umjdbcTemplate
zu erstellen.
Note
In Spring io befindet sich einjira report, um die endgültigen Modifikatoren zu entfernen, aber die Auflösung ist "wird nicht behoben".