gpt4 book ai didi

java - @Lazy 是否可以初始化 Spring @Value?

转载 作者:搜寻专家 更新时间:2023-11-01 02:22:21 25 4
gpt4 key购买 nike

@Lazy 是否可以初始化 Spring @Value

例如

@Lazy
@Value("${someConfig}")
private String someConfig;

我具体指的场景是一个通过 JNDI 设置的变量,an embedded Tomcat container, which has some of it's JNDI variables initialised during Spring Boot loading ...我能想到的其他场景你想要 JIT 变量填充:检索变量是“昂贵的”并且你不想影响启动时间,变量在应用程序启动时不可用等。

以上代码报错如下:

java.lang.IllegalArgumentException: Cannot subclass final class java.lang.String

我想您可以通过使用 @ConfigurationProperties bean 实现延迟加载变量?

后续问题:如果底层变量源发生变化(例如服务器上的 JNDI),@Value 是否可以/是否会重新初始化已初始化的变量(无需重新启动应用程序) ? 即重新检索

(我正在尝试最后两种情况)

最佳答案

您可以尝试这样的设置。缺点是它要求使用此变量的 bean 也声明为 @Lazy

@Bean(name = "myVar")
@Lazy
String foo(@Value("${someConfig}") String someConfig) {
return someConfig;
}

@Component
@Lazy
class SomeComponent {

@Autowired
@Qualifier("myVar")
String myVar;
}

关于java - @Lazy 是否可以初始化 Spring @Value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com