You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot:跨包使用@Value读取application.properties异常问题

问题原因及解决办法

核心原因

Spring Boot默认只会扫描@SpringBootApplication注解所在包(此处为com.test.pkg1)及其子包下的类,将它们纳入Spring容器管理。com.test.pkg2与com.test.pkg1是同级包,不在默认扫描范围内,因此pkg2中的类未被Spring接管,@Value注解不会被解析,直接输出占位符文本。

解决办法

方法1:调整包结构

将com.test.pkg2修改为com.test.pkg1.pkg2,使其成为pkg1的子包,Spring默认扫描即可覆盖该包,无需额外配置。

方法2:手动指定扫描范围

在带有@SpringBootApplication的类上,通过scanBasePackages属性明确指定要扫描的包:

@SpringBootApplication(scanBasePackages = {"com.test.pkg1", "com.test.pkg2"})
public class YourSpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourSpringBootApplication.class, args);
    }
}

也可通过scanBasePackageClasses指定包内的类来间接设置扫描范围:

@SpringBootApplication(scanBasePackageClasses = {Pkg1DemoClass.class, Pkg2DemoClass.class})

方法3:确保pkg2的类是Spring组件

无论采用哪种扫描方式,pkg2中的类必须添加Spring组件注解(如@Component、@Service、@Controller、@Repository),只有被Spring实例化为Bean的类,@Value注解才会生效。示例:

@Component
public class Pkg2DemoClass {
    @Value("${prop_name}")
    private String propValue;
    
    // 业务代码
}

内容的提问来源于stack exchange,提问作者Desenfoque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:55:54