我的应用程序正在使用 Spring Boot(最新版本),并且具有使用 Spring(最新版本)的依赖项。
该依赖项有一个用 Dao
注释的 @Repository
类,该类将几个未注释的抽象类扩展到 JdbcDaoSupport 。
此外,此类有一个 @PostConstruct
注释的方法,用于设置数据源。
辅助 Service
类,用 @Service
注释,从 Dao
扩展。
我发现 Autowiring 的 <Service instance>.getJdbcTemplate()
- 来自上述 JdbcDaoSupport
父类(super class) - 给出了 null
。
如果我省略 @Repository
上的 Dao
注释,则 jdbcTtemplate 已正确设置。
如果我用 Dao
注释 @Service
,也会发生同样的情况。
事实上,我可能没有出于特定目的对它们进行了注释 - 整个应用程序代码是实验性的,尽管我可以看到主服务扩展存储库(dao)的情况,而更复杂的服务可以实现它的逻辑委托(delegate)给几个 dao - 这是 Spring 禁止的还是我错过了什么?
更新
我向服务添加了 @PostConstruct
方法,但它没有被调用。
更新/2
我尝试在服务内 Autowiring dao,但得到了相同的结果;在我看来,这似乎是 @Repository
和 PersistenceExceptionTranslationPostProcessor
的问题,其中后者用代理生成的 bean ( GitHub issue ) 替换了我的 bean。
最佳答案
您应该将 DAO Autowiring 到服务中,而不是扩展。
关于java - @Repository dao 中的 Spring @PostConstruct 和扩展 dao 的 @Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60341372/