Java 是否可以@Lazy init一个Spring@值?

Java 是否可以@Lazy init一个Spring@值?,java,spring,spring-boot,Java,Spring,Spring Boot,是否可以@Lazy初始化弹簧@Value? e、 g 我特别提到的场景是一个通过JNDI设置的变量,并且。。。我可以想到的其他场景是您希望JIT变量填充的地方:检索变量“昂贵”,并且您不想影响启动时间,该变量在应用程序启动时不可用,等等 上述代码给出了以下错误: java.lang.IllegalArgumentException:无法子类化final类 java.lang.String 我想您可能会通过使用 后续问题:如果基础变量源发生更改(例如服务器上的JNDI),@Value-初始化变量是

是否可以
@Lazy
初始化弹簧
@Value

e、 g

我特别提到的场景是一个通过JNDI设置的变量,并且。。。我可以想到的其他场景是您希望JIT变量填充的地方:检索变量“昂贵”,并且您不想影响启动时间,该变量在应用程序启动时不可用,等等

上述代码给出了以下错误:

java.lang.IllegalArgumentException:无法子类化final类 java.lang.String

我想您可能会通过使用

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


(我正在尝试最后两种方案)

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


不,对于您的后续问题,不是针对单例bean中的字段。但是,如果您成功地将bean声明为singleton并每次获得一个新实例,那么该字段每次都将被初始化为当前值。@SotiriosDelimanolis谢谢!作为对特定错误的说明:
@Lazy
是通过用代理替换字段来实现的,如果字段的声明类型是final类,则无法执行代理。
@Lazy
@Value("${someConfig}")
private String someConfig;
@Bean(name = "myVar")
@Lazy
String foo(@Value("${someConfig}") String someConfig) {
    return someConfig;
}

@Component
@Lazy
class SomeComponent {

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