Spring @Value default value
This tutorial presents how to set default values in Spring @Value annotation, using properties syntax and Spring Expression Language (SPEL).
Spring Config class with static PropertySourcesPlaceholderConfigurer bean that is needed to resolve properties syntax inside @Value:
@Configuration public class Config { @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { // Needed by Spring to resolve ${} inside @Value: return new PropertySourcesPlaceholderConfigurer(); } }
Now a bean with defaults that we can access inside @Value:
@Component("defaults") public class Defaults { public String getHostname() { return "default.host"; } }
Examples of setting default values using @Value:
@Component public class SampleSpringComponent { @Value("${hostname : localhost}") private String hostName; @Value("${target.dir : #{systemProperties['java.io.tmpdir']}}") private String dir; @Value("${hostconfig.hostname : #{@defaults.hostname}}") private String spelHostname; @Value("#{systemProperties['java.user.home'] ?: '/tmp/default'}") private String spelDir; }
Results:
Host name: localhost Directory: /tmp SPEL Host name: default.host SPEL Directory: /tmp/default
Summary of setting defaults:
- Property syntax use: ${expected : default}
- SPEL use: #{expected[‘value’] ?: default} (Elvis operator)
- SPEL expressions can be mixed with property syntax to access beans in context or use other complex expressions.