我在装饰的@PostConstruct中添加一些系统属性 如下所示的Bean方法:
@Profile("dev")
@Component
public class DeveloppementPropertySetter {
@PostConstruct
public void setProperty() {
System.setProperty("ip", "X.X.X.X");
System.setProperty("port", "1234");
}
}
当我尝试从另一个bean(在另一个类中)获取那些属性时:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
String ip = System.getProperty("ip");
String port = System.getProperty("port");
(... using port and ip to customize the builder ...)
}
我得到了 NullPointerException ,而spring无法实例化restTemplate bean。如何确保之前 restTemplate初始化Bean DeveloppementPropertySetter?我不想使用@DependsOn注释。
答案 0 :(得分:0)
@DependsOn
似乎是您的问题的答案。
如果您将@DependsOn
添加到restTemplate,
那么Spring将保证DeveloppementPropertySetter
bean在尝试创建restTemplate之前将被完全初始化。
“我不想使用@DependsOn”绝不是有效的声明。
在创建RestTemplate之前,必须对DeveloppementPropertySetter Bean进行完全初始化,
尚未将DeveloppementPropertySetter注入RestTemplate bean中。
这种情况似乎正是创建@DependsOn
批注的原因。