Как и в Java, вы не можете использовать свойства, которые вводятся после создания при времени создания.В Java вы получите NullPointerException
, когда будете делать эквивалент, например,
@Autowired
private Datasource datasource;
private JdbcTemplate jt = new JdbcTemplace(dataSource);
Но вы можете позволить Spring вызывать метод по вашему выбору после того, как он введет все:
lateinit var jt: JdbcTemplate
@PostConstruct
fun initAfterAutowireIsDone() {
jt = JdbcTemplate(dataSource)
}
Существует также интерфейс InitializingBean
, который можно использовать вместо аннотации.То же самое работает в Java.
Другой вариант, который у вас есть в Kotlin, - это использовать свойство lazy, когда вы гарантируете, что не обращаетесь к нему во время создания экземпляра.
val jt: JdbcTemplate by lazy { JdbcTemplate(dataSource) }