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

Spring Boot集成Jasypt加载解密后密码出现null值问题咨询

问题原因

核心问题是Spring Bean的生命周期执行顺序导致的:

  • Spring实例化Bean时,会先执行类的构造方法完成对象创建,之后才会对@Value标注的属性执行注入赋值。你在构造方法中直接读取secret属性时,注入动作还未执行,因此拿到的是null。
  • 至于替换为不存在的abc.def会直接抛出异常,是因为Spring对占位符的解析校验早于Bean实例化阶段,只要占位符对应的配置不存在,会在校验阶段直接报错,不会走到Bean实例化的步骤,因此和你当前遇到的null值问题并不冲突。

解决方案

你可以任选以下任意一种方式修复:

  1. 使用构造方法注入
    把@Value注解放到构造方法的参数上,Spring实例化Bean时就会将解析好的属性值传入构造方法:
@Component
public class MyOtherClass {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyOtherClass.class);

    String secret;

    public MyOtherClass(@Value("${secret.property}") String secret) {
        this.secret = secret;
        LOGGER.info("PW: " + secret);
    }
}
  1. 使用@PostConstruct初始化方法
    @PostConstruct标注的方法会在Bean所有属性注入完成后执行,此时读取属性就能拿到正确值:
@Component
public class MyOtherClass {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyOtherClass.class);

    @Value("${secret.property}")
    String secret;

    @PostConstruct
    public void init() {
        LOGGER.info("PW: " + secret);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:03