由于每个属性都被设置到每个应用程序的JVM实例中,因此一旦我的应用程序设置了所有it bean并开始在我的服务器上运行,将会发生什么行为:
System.setProperty(String键,String值(是否会在运行时通过更改特定JVM实例中的前一个键或创建新实例来反映为新的更改?
此外,我注意到构造函数中有一个不同的异常,我试图在它之前设置Property
我做了一些测试,结果是:
如果在bean的构造函数中使用属性,则旧bean在属性更改后不会发生更改。因此,更改不会影响具有默认Scope
的bean。如果您有带有@RequestScope的Bean,那么每次收到新请求时,都会创建具有新值的新Bean。
@RestController
@RequestScope
public class Controller {
private String testValue;
@Autowired
public Controller(@Value("${pl.bier.test}") String testValue) {
this.testValue = testValue;
}
@GetMapping("/foo")
public FooModel fooEndpoint() {
System.setProperty("pl.bier.test", testValue + "bar");
return new FooModel(testValue);
}
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class FooModel {
private String value;
}
当访问/foo端点时,您每次都会得到不同的响应(每次多得到一个"嘿"(
如果你删除@RequestScope,你会得到相同的答案。