Spring中XML定义Bean后@Autowired注入失败,对象为null求助
解决Spring中@Autowired注入Bean为null的问题
嘿,我来帮你搞定这个注入失败的问题!你的student对象为null,核心原因是你的JUnit测试没有加载Spring容器——毕竟Spring得先初始化容器,才能帮你完成依赖注入呀,普通JUnit测试直接创建对象的方式,完全走不到Spring的注入逻辑里。
问题根源拆解
你在spring.xml里已经正确定义了Student的Bean,也配置了组件扫描,但你的测试类StudentDaoImplTest只加了@Component注解,却没告诉JUnit要启动Spring上下文。没有Spring容器的加持,@Autowired就是个空注解,自然没法给你注入Student实例。
具体解决方案
给测试类加上Spring测试相关的注解,让JUnit启动Spring容器并加载你的spring.xml配置:
修改后的测试类代码如下:
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @Component @RunWith(SpringJUnit4ClassRunner.class) // 指定用Spring的测试运行器启动容器 @ContextConfiguration(locations = {"classpath:spring.xml"}) // 指定Spring配置文件的位置 public class StudentDaoImplTest { @Autowired Student student; @Test public void test1() { System.out.println(student); } }
额外检查项
- 确保
spring.xml放在类路径下(比如src/main/resources目录),这样classpath:spring.xml才能正确定位到它。 - 确认
StudentDaoImplTest所在的包在component-scan的base-package="com.wantao"范围内,保证Spring能扫描到这个测试类并纳入容器管理。 - 你在xml里只定义了一个
Student类型的Bean,所以@Autowired按类型注入完全没问题,不需要额外加@Qualifier("test1");如果后续有多个同类型Bean,再考虑用@Qualifier指定Bean的id。
这样修改后,JUnit测试时会先启动Spring容器,加载配置中的Bean,@Autowired就能成功注入Student实例了。
内容的提问来源于stack exchange,提问作者Selenium
相关产品推荐
相关产品推荐

