Заставить пружину @Value принять значение по умолчанию из статического поля - PullRequest
0 голосов
/ 17 мая 2018

У меня есть конфигурация Java, в которой я создаю bean-компонент, используя некоторые свойства, определенные в application.properties. Для одного из них у меня есть значение по умолчанию, которое довольно длинное, поэтому я извлек это значение в поле public static final String этой конфигурации, теперь я хочу, чтобы @Value использовал его в качестве значения по умолчанию.

Итак, в конце концов я хочу что-то вроде этого:

@Configuration
public class MyConfiguration {

    public static final String DEFAULT_PROPERTY_VALUE = "long string...";

    @Bean("midPriceDDSEndpoint")
    public DistributedDataSpace<Long, MidPriceStrategy> midPriceDDSEndpoint(
        @Value("${foo.bar.my-property:DEFAULT_PROPERTY_VALUE}") String myPropertyValue) {
    ... create and return bean...
    }
}

Однако к весне мое поле не подходит, поэтому мне любопытно, смогу ли я как-нибудь найти его.

Один из способов исправить это - получить доступ к этому статическому полю через компонент конфигурации: @Value(${foo.bar.my-property:#{myConfigurationBeanName.DEFAULT_PROPERTY_VALUE}}), но использование этого подхода делает конструктор нечитаемым, поскольку аннотация Value занимает много места (как имя свойства и компонент конфигурации). имя длиннее, чем в этом примере). Есть ли другой способ заставить пружину использовать статическое поле в качестве значения по умолчанию для свойства?

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Вы можете просто ввести Environment и получить значение по умолчанию следующим образом:

@Configuration
public class MyConfiguration {

    public static final String DEFAULT_PROPERTY_VALUE = "long string...";

    @Autowired
    private Environment env;

    @Bean("midPriceDDSEndpoint")
    public DistributedDataSpace<Long, MidPriceStrategy> midPriceDDSEndpoint() {
        String myPropertyValue = env.getProperty("foo.bar.my-property", DEFAULT_PROPERTY_VALUE);
    }
}

Лично я считаю, что это немного более читабельно ...

0 голосов
/ 17 мая 2018

Я бы сделал @Value("${foo.bar.my-property:" + DEFAULT_PROPERTY_VALUE + "}")

0 голосов
/ 17 мая 2018

Я не уверен на 100%, но думаю, что это невозможно.Реальный вопрос здесь в том, почему вам нужно сделать что-то подобное?Какой вариант использования?Вы всегда можете сделать простой обходной путь, как

private String getMyPropertyValue() {
    return myPropertyValue.equals("some_explicitly_defined_default_value") ? DEFAULT_PROPERTY_VALUE : myPropertyValue;
}
...