是否有可能@Lazy初始化一个Spring @Value?

时间:2016-05-04 23:46:18

标签: java spring spring-boot

是否可以@Lazy初始化@Value

e.g。

@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变量填充的其他场景:它& #39; s"昂贵"要检索变量并且您不想影响启动时间,该变量在应用程序启动时不可用等。

上面的代码给出了以下错误:

  

java.lang.IllegalArgumentException:无法继承最终类   java.lang.String中

我想你可以使用@ConfigurationProperties bean

来实现延迟加载的变量

后续问题:如果更改了基础变量源(例如服务器上的JNDI),可以/将@Value - 初始化变量重新初始化(不重启应用)吗?即重新检索

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

1 个答案:

答案 0 :(得分:5)

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

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

@Component
@Lazy
class SomeComponent {

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