Kotlin + Spring bootのサーバサイドKotlinで@Transactionalを付与したときに@Autowired がnullになってエラーが発生したときの対応方法です。
ここでの問題は、Kotlinではメソッドがデフォルトでfinalであるため、Springがクラスのプロキシを作成できないことです。
o.s.aop.framework.CglibAopProxy: Unable to proxy method [public final int org.mycompany.MyDAO.update(...
classとメソッドに「open」を追記することで問題が解決されます。
@Service
@Transactional
open class MyDAO(val jdbcTemplate: JdbcTemplate) {
open fun update(sql: String): Int {
return jdbcTemplate.update(sql)
}
}
これで自分のシステムもうまく動きました。