Spring Boot邮箱验证令牌存储遇空指针:confirmationTokenRepository为null
问题分析
报错Cannot invoke "com.marin.thrift.registration.token.ConfirmationTokenRepository.save(Object)" because "this.confirmationTokenRepository" is null的核心原因是**ConfirmationTokenService中的confirmationTokenRepository未被Spring正确注入**。
你在ConfirmationTokenService中同时添加了@AllArgsConstructor和@NoArgsConstructor:
@AllArgsConstructor会生成包含所有字段的构造器,这是Spring推荐的构造器注入方式@NoArgsConstructor会生成无参构造器,Spring可能会优先使用无参构造器创建ConfirmationTokenService实例,导致依赖的confirmationTokenRepository没有被注入,最终为null
解决方案
直接删除ConfirmationTokenService中的@NoArgsConstructor注解,让Spring通过@AllArgsConstructor生成的带参构造器完成依赖注入:
修改后的ConfirmationTokenService.java:
import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @Service @AllArgsConstructor public class ConfirmationTokenService { private ConfirmationTokenRepository confirmationTokenRepository; public void saveConfirmationToken(ConfirmationToken token) { confirmationTokenRepository.save(token); } }
补充说明
- Spring在管理Bean时,优先使用构造器注入(相比字段注入更安全,避免空指针),
@AllArgsConstructor配合@Service可以让Spring自动识别并注入所有依赖的Bean - 如果你确实需要保留无参构造器,也可以给
confirmationTokenRepository字段添加@Autowired注解,但这种字段注入方式不如构造器注入推荐
内容的提问来源于stack exchange,提问作者user13372981
相关产品推荐
相关产品推荐

