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

使用SpringEL获取Map值始终为null,求排查问题原因

SpringEL @Value注入Map值为null的问题解决

问题核心原因

你直接通过new GetData()创建对象,这个对象不在Spring容器的管理范围内,Spring不会对其执行依赖注入逻辑,因此@Value注解标注的属性不会被赋值,始终为null。
而WorkersHolder的main方法能正常输出,是因为它直接创建自身对象并调用本地Map,没有依赖Spring的注入机制。


解决方法

方法一:通过Spring注解上下文获取容器管理的Bean

修改GetData的main方法,让Spring初始化上下文并从容器中获取实例:

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

@Data
@Component
public class GetData {

    @Value("#{workersHolder.salaryByWorkers['John']}")
    private Integer johnSalary;

    @Value("#{workersHolder.salaryByWorkers['George']}")
    private Integer georgeSalary;

    @Value("#{workersHolder.salaryByWorkers['Susie']}")
    private Integer susieSalary;


    public static void main(String[] args) {
        // 初始化Spring上下文,替换为你的类所在包路径
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.your.package");
        // 从容器中获取受Spring管理的GetData实例
        GetData getData = context.getBean(GetData.class);
        // 此时会输出35000
        System.out.println(getData.johnSalary);
        // 关闭上下文
        context.close();
    }
}

注意将com.your.package替换为WorkersHolder和GetData实际所在的包名。

方法二:基于SpringBoot应用启动(适用于SpringBoot项目)

如果是SpringBoot项目,可通过启动类获取容器中的Bean:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class YourApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(YourApplication.class, args);
        GetData getData = context.getBean(GetData.class);
        System.out.println(getData.johnSalary);
    }
}

确保WorkersHolder和GetData在启动类的扫描范围内(默认同包或子包即可)。


额外说明

WorkersHolder上的@Component("workersHolder")注解配置正确,SpringEL表达式#{workersHolder.salaryByWorkers['John']}中的名称与Bean名称一致,无需修改。

内容的提问来源于stack exchange,提问作者黃奕翔

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:45:24