Spring Boot中Autowired注入返回空指针异常的排查与解决
问题根源与修复方案
为什么会出现NullPointerException?
你在main方法里直接通过new DestClass()创建了DestClass的实例,这个对象没有被Spring容器管理。Spring的依赖注入(@Autowired)只对容器内的Bean生效,所以testWired成员变量根本没被注入,自然是null,调用它的方法就会抛出空指针异常。
正确的修复方式
你需要从Spring容器中获取DestClass的Bean实例,而不是自己手动new。修改后的启动类代码如下:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class SpringAutoWApplication { public static void main(String[] args) { // 启动Spring应用并获取容器上下文 ConfigurableApplicationContext context = SpringApplication.run(SpringAutoWApplication.class, args); // 从容器中获取DestClass的Bean实例 DestClass dc = context.getBean(DestClass.class); dc.showTestWired(); } }
额外小提示
- 原来的
@ComponentScan注解可以去掉,因为@SpringBootApplication已经包含了@ComponentScan的功能,会自动扫描当前包及其子包下的@Component标注类。 - 要确保
DestClass和TestWired类都在SpringAutoWApplication所在包或者其子包下,这样Spring才能扫描到它们并注册为容器内的Bean。
内容的提问来源于stack exchange,提问作者Joe G
相关产品推荐
相关产品推荐

