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}}")
这是前两个答案的组合。