Spring Boot测试目录下@Value注解读取配置值为null如何解决
问题根因
@Value注解的属性注入能力仅对Spring IoC容器托管的Bean生效,你手动实例化的类、没有被Spring识别为组件的类,内部的@Value不会被自动赋值,默认就是null- 测试类如果没有加
@SpringBootTest注解,不会启动Spring测试上下文,所有依赖注入、配置加载逻辑都不会执行,自然拿不到配置值
修复步骤
- 给A类添加Spring组件注解,将其注册为容器管理的Bean
示例代码:
// 加上@Component注解,让Spring启动时自动扫描到这个类并实例化托管 @Component public class A { @Value("${test.name}") private String name; @Value("${test.age}") private Integer age; public void print() { System.out.println("name:" + name + "; age:" + age); } }
- 给作为测试启动类的B类添加
@SpringBootTest注解,启动Spring测试上下文,同时用@Autowired注入A类的实例,不要手动new A()
示例代码:
@SpringBootTest class BTest { // 直接注入Spring托管的A类实例,不要自己new A() @Autowired private A a; @Test void testPrintInfo() { a.print(); } }
额外注意事项
- 确保
src/test/resources下的配置文件命名为application.properties(如果是自定义命名,需要在A类上加@PropertySource("classpath:你的配置文件名.properties")指定加载路径) - 配置文件中的属性key要和
@Value中的占位符完全一致,避免拼写错误 - 所有需要依赖注入、配置注入的类都不要手动实例化,统一从Spring容器中获取
内容的提问来源于stack exchange,提问作者Pioneer Even
相关产品推荐
相关产品推荐

