Spring Boot: проверка типов свойств конфигурации, привязка конструктора

Пример из предыдущего поста может быть переписан неизменным образом, как показано в следующем примере:

package com.example;

import java.net.InetAddress;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
import org.springframework.boot.context.properties.DefaultValue;

@ConstructorBinding
@ConfigurationProperties("acme")
public class AcmeProperties {

    private final boolean enabled;

    private final InetAddress remoteAddress;

    private final Security security;

    public AcmeProperties(boolean enabled, InetAddress remoteAddress, Security security) {
        this.enabled = enabled;
        this.remoteAddress = remoteAddress;
        this.security = security;
    }

    public boolean isEnabled() { ... }

    public InetAddress getRemoteAddress() { ... }

    public Security getSecurity() { ... }

    public static class Security {

        private final String username;

        private final String password;

        private final List roles;

        public Security(String username, String password,
                @DefaultValue("USER") List roles) {
            this.username = username;
            this.password = password;
            this.roles = roles;
        }

        public String getUsername() { ... }

        public String getPassword() { ... }

        public List getRoles() { ... }

    }

}

В этой настройке аннотация @ConstructorBinding используется, чтобы указать, что следует использовать привязку конструктора. Это означает, что связыватель ожидает найти конструктор с параметрами, которые вы хотите связать.

Вложенные члены класса @ConstructorBinding (например, Security в приведенном выше примере) также будут связаны через их конструктор.

Значения по умолчанию можно указать с помощью @DefaultValue, и будет применена та же служба преобразования, чтобы привести значение String к целевому типу отсутствующего свойства.

Чтобы использовать привязку конструктора, класс должен быть включен с помощью @EnableConfigurationProperties или сканирования свойств конфигурации. Вы не можете использовать связывание конструктора с bean-компонентами, которые создаются обычными механизмами Spring (например, bean-компоненты @Component, bean-компоненты, созданные с помощью методов @Bean, или bean-компоненты, загружаемые с помощью @Import)

Если у вас есть более одного конструктора для вашего класса, вы также можете использовать @ConstructorBinding непосредственно на конструкторе, который должен быть связан.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки