19

我正在使用 Spring Boot 应用程序。在某些@Component@Value字段中加载,而不是在其他类中它们始终是null.

似乎(s)是在我的/创建@Value之后加载的。@Bean@Component

我需要从我的@Bean.

你有什么建议吗?

4

4 回答 4

54

属性(以及所有的 bean 依赖项)在 bean 被构造(构造函数的执行)之后被注入。

如果你需要它们,你可以使用构造函数注入。

@Component
public class SomeBean {
    private String prop;
    @Autowired
    public SomeBean(@Value("${some.prop}") String prop) {
        this.prop = prop;
        //use it here
    }
}

另一种选择是移动方法中的构造函数逻辑,并@PostConstruct在创建 bean 并解析它的所有依赖项和属性值后执行注解。

于 2015-02-20T20:17:07.053 回答
1

当您将其解析为静态变量时,可能会发生这种情况。我曾经观察过这一点,并通过消除静电来解决它。正如人们常说的那样,使用静电时要小心。

于 2019-03-18T16:42:42.430 回答
0

你有没有尝试过:

@Component
@PropertySource("file:/your/file/path")
public class MyBean {

  private @Value("${property}") String property;
  ...
}
于 2015-02-20T19:24:53.397 回答
-2

另一个可能的原因是“@Value”行位于需要这些属性/值的行下方。

我花了很多时间调试这个问题,发现行的顺序很重要!

于 2016-04-11T07:43:23.067 回答