Avatar ·

如何在 Kotlin 中正确使用 Spring 注解(@Autowired, @Component)?

大家好!我刚开始学习 Kotlin,并尝试将我的旧 Spring 项目从 Java 迁移到这门语言。遇到了一个问题:Spring 注解(如 @Autowired)不像我在 Java 中习惯的那样工作。

在 Java 中,我通常这样做:

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

当我尝试用 Kotlin 写同样的代码时:

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

编译器对 lateinit var 报错(声称字段必须是 nullable 或已初始化),并且应用程序抛出 NullPointerException。