Avatar ·

Cómo usar correctamente las anotaciones Spring (@Autowired, @Component) en Kotlin?

¡Hola a todos! Acabo de empezar a aprender Kotlin y estoy intentando migrar mi proyecto antiguo en Spring de Java a este lenguaje. Me encontré con un problema: las anotaciones Spring, como @Autowired, no funcionan como estaba acostumbrado en Java.

En Java solía hacerlo así:

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

Cuando intenté escribir lo mismo en Kotlin:

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

El compilador se queja de lateinit var (supuestamente el campo debe ser nullable o estar inicializado), y la aplicación falla con NullPointerException.