Java Spring:如何使用`@ Value`注释注入`Environment`属性?

使用诸如的构造

@Component public class SomeClass { @Inject private Environment env; private String key; @PostConstruct private void init() { key = env.getProperty("SOME_KEY_PROPERTY"); } .... } 

可以为某些字段分配一些属性。

有没有更短,更简洁的forms来做到这一点?

您应该能够这样做(假设您已注册PropertySourcesPlaceHolderConfigurer)

 @Value("${SOME_KEY_PROPERTY}") private String key; 
 @Component public class SomeClass { @Value("#{environment.SOME_KEY_PROPERTY}") private String key; .... } 

您可能还发现在未定义变量的情况下提供默认值很有用:

 @Value("${some_property:default_value}") private String key; 

否则,只要some_property您就会收到exception。

default_value也可以为空,在这种情况下,它的行为就像some_property是可选的:

 @Value("${some_property:}") private String key; 

(注意冒号)

如果默认值包含特殊字符(点,冒号等),则将其包装在SpEL中,如下所示:

 @Value("${some_property:#{'default_value'}}") private String key; 

如果需要将环境变量添加为默认值。

 @Value("${awsId:#{environment.AWS_ACCESS_KEY_ID}}") @Value("${awsSecret:#{environment.AWS_SECRET_ACCESS_KEY}}") 

这是前两个答案的组合。