因为每个属性都被设置到每个应用程序的jvm示例中,所以一旦我的应用程序设置了所有it bean并开始在我的服务器上运行以下内容,将会发生什么行为:system.setproperty(字符串键,字符串值)是否会在运行时通过更改特定jvm示例中的前一个键来反映新的更改,或者是否会创建新示例?我还注意到在一个构造函数中有一个不同的异常,我试图在它之前设置属性。
8yparm6h1#
我做了一些测试,结果是:如果在bean的构造函数中使用属性,则在属性更改后旧bean不会更改。因此,更改不会影响默认的bean Scope . 如果您有带有@requestscope的bean,则每次接收到新请求时,都会创建带有新值的新bean。
Scope
@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端点时,每次都会得到不同的响应(每次都会有一个“hey”)如果删除@requestscope,您总是得到相同的答案。
1条答案
按热度按时间8yparm6h1#
我做了一些测试,结果是:
如果在bean的构造函数中使用属性,则在属性更改后旧bean不会更改。因此,更改不会影响默认的bean
Scope
. 如果您有带有@requestscope的bean,则每次接收到新请求时,都会创建带有新值的新bean。当访问/foo端点时,每次都会得到不同的响应(每次都会有一个“hey”)
如果删除@requestscope,您总是得到相同的答案。