У меня есть следующая структура Spring Bean
abstract class GenericRepository<T> {
private val FIND_BY_ID_SQL = "SELECT * FROM ${this.getTableName()} WHERE id = ?"
abstract fun getTableName(): String
abstract fun jdbcTemplate(): JdbcTemplate
abstract fun getMapper(): RowMapper<T>
fun find(id: Long): T? {
return jdbcTemplate().queryForObject(FIND_BY_ID_SQL, arrayOf(id), getMapper())
}
}
Репозиторий пользователя
@Repository
class UserRepository(
@Autowired
private val jdbcTemplate: JdbcTemplate
) : GenericRepository<User>() {
companion object {
private const val INSERT_SQL = "INSERT INTO \"user\"(name, age) VALUES (?,?)"
}
private class LogMapper : RowMapper<User> {
override fun mapRow(rs: ResultSet, rowNum: Int): User? {
return User(
id = rs.getLong("id"),
name = rs.getString("name"),
age = rs.getInt("operation")
)
}
}
override fun getTableName(): String {
return "user"
}
override fun jdbcTemplate(): JdbcTemplate {
return jdbcTemplate
}
override fun getMapper(): RowMapper<User> {
return LogMapper()
}
}
Проблема, когда Spring создает прокси и создает компонент UserRepository, который не инициализирует FIND_BY_ID_ SQL оставив его пустым.
![Null variable](https://i.stack.imgur.com/FTB5z.png)
Вопрос: как usign абстрактный класс заставляет пружину инициализировать переменную FIND_BY_ID_ SQL?
UPD
Я использовал @Component вместо @Repository, и проблема была решена. FIND_BY_ID_ SQL больше не равен нулю.