+-
java – @Lazy是否可以初始化一个Spring @Value?
是否有可能@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-initialised变量(不重启应用程序)?即重新检索

(我正在尝试最后两个场景)

最佳答案
你可以尝试这样的设置.缺点是它要求使用此变量的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? - 乐贴网