springboot项目中通过@Value给参数附值失败

项目场景:

springboot项目中通过@Value给属性附值失败


问题描述

给参数赋值失败,打印为空值

@Value("${python.server.port}")
private  int port;
@Value("${python.server.host}")
private String host;
public PythonSocketClient(){
    System.out.println("Host: " + host);
    System.out.println("Port: " + port);

    connect();
}

测试发现是成功注入的

@SpringBootTest
public class ValueTest {
    @Value("${python.server.host}")
    private String host;

    @Test
    public void testConfiguration() {
        System.out.println("Host configured as: " + host);
    }
}

 可以看到是正确赋值了


原因分析:

这是因为在 Spring Bean 的生命周期中,构造函数是最先被调用的,此时依赖注入还没有完成,因此 @Value 注入的字段尚未被初始化。

也就是说还没附上值就运行了构造器


解决方案:

使用 @PostConstruct 注解的方法来确保在所有字段注入完成之后再执行初始化逻辑。

    @Value("${python.server.port}")
    private  int port;
    @Value("${python.server.host}")
    private String host;

    @PostConstruct
    public void init() {
        System.out.println("Host: " + host);
        System.out.println("Port: " + port);
        connect();
    }

再次运行

 发现已经可以正常获取值了。

相关推荐

  1. 模板参数Value Template Parameters

    2024-04-27 21:22:05       35 阅读
  2. nicerefresh--自动刷新Spring@Value

    2024-04-27 21:22:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 21:22:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 21:22:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 21:22:05       87 阅读
  4. Python语言-面向对象

    2024-04-27 21:22:05       96 阅读

热门阅读

  1. mac上用brew安装node

    2024-04-27 21:22:05       33 阅读
  2. Python|OpenCV-边缘检测算法之Canny算法(15)

    2024-04-27 21:22:05       35 阅读
  3. 组合总数 python

    2024-04-27 21:22:05       29 阅读
  4. 智慧校园-教务管理系统建设要素

    2024-04-27 21:22:05       36 阅读
  5. 【ROS2笔记八】ROS2编写Python launch 文件

    2024-04-27 21:22:05       34 阅读
  6. 后知后觉Makefile之二(专谈并行编译)

    2024-04-27 21:22:05       32 阅读