Avatar ·

Como usar corretamente as anotações Spring (@Autowired, @Component) em Kotlin?

Olá a todos! Comecei a estudar Kotlin recentemente e estou tentando migrar meu projeto antigo em Spring com Java para esta linguagem. Encontrei um problema: as anotações Spring, como @Autowired, não funcionam como eu estava acostumado em Java.

Em Java, eu geralmente fazia assim:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public String getUserName(Long id) {
        return userRepository.findById(id).map(User::getName).orElse("Unknown");
    }
}

Quando tentei escrever o mesmo em Kotlin:

@Service
class UserService {
    @Autowired
    private lateinit var userRepository: UserRepository
    
    fun getUserName(id: Long): String {
        return userRepository.findById(id).map { it.name }.orElse("Unknown")
    }
}

O compilador reclama do lateinit var (supostamente o campo deve ser nullable ou inicializado), e a aplicação cai com NullPointerException. Tentei usar