В моем приложении Spring Boot я испытываю нулевой jdbcTemplate
в подклассе JdbcDaoSupport
, когда последний помечается @Repository
.
Это класс Дао:
@Repository
public class Dao extends JdbcDaoSupport {
@Autowired
private DataSource dbDataSource;
@PostConstruct
private void initialize() throws Exception {
setDataSource(dbDataSource);
}
/* ... */
Это класс обслуживания:
@Service
public class Service extends Dao {
/* ... */
Это инициализация задания
@DisallowConcurrentExecution
public class Job extends QuartzJobBean {
private Service service;
@Autowired
public void setService(Service service) {
this.service = service;
}
/* ... */
}
Обратите внимание, что то же самое происходит, если я автоматически подключаю Дао внутри Службы .
Если я поставлю @Service
на Дао, все в порядке.
После некоторой отладки я обнаружил, что PersistenceExceptionTranslationPostProcessor
в конечном итоге заменяет мой компонент на сгенерированный прокси, на который аннотированный метод @PostConstruct
не вызывается, поэтому мой базовый dao / service не инициализирован.
Я нашел замену в PersistenceExceptionTranslationPostProcessor
суперклассе AbstractAdvisingBeanPostProcessor
внутри метода postProcessAfterInitialization(Object, String)
.
Что-то не так в моем коде?
ОБНОВЛЕНИЕ
Я добавил Rest Controller, где я автоматически подключил службу. Я могу нормально выполнять запросы.
Отладчик показывает, что любой вызов метода Dao перехватывается прокси, но вызов getJdbcTemplate()
- нет (я думаю, это из-за того, что final
) следовательно, значение null
.