propriedades de configuração da mola tipo recursiva

votos
1

Eu estou tentando criar uma classe de propriedades de configuração que tem uma classe recursiva, estruturado de forma similar a uma lista encadeada. Estou usando 2.0.6.RELEASE inicialização Spring, ea classe está sendo autowired usando @EnableConfigurationProperties({EnginealConfig.class}).

O problema que estou tendo é que apenas um primeiro nível será ligado ao objeto de teste, x.testnunca vai ficar definido.

Usando o seguinte arquivo application.properties:

engineal.x.value: Test1
engineal.x.test.value: Test2
engineal.x.test.test.value: Test3

E a seguinte classe de propriedades de configuração:

@ConfigurationProperties(prefix = engineal)
public class EnginealConfig {

    static class Test {

        private String value;
        private Test test;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public Test getTest() {
            return test;
        }

        public void setTest(Test test) {
            this.test = test;
        }

        @Override
        public String toString() {
            return Test{ +
                    value=' + value + '\'' +
                    , test= + test +
                    '}';
        }
    }

    private Test x;

    public Test getX() {
        return x;
    }

    public void setX(Test x) {
        this.x = x;
    }

    @Override
    public String toString() {
        return EnginealConfig{ +
                x= + x +
                '}';
    }
}

o objeto será impresso EnginealConfig{x=Test{value='Test1', test=null}}. Infelizmente, a recursão não está funcionando.

Depois de mexer em torno de tentar coisas diferentes para chegar a este trabalho, eu tentei mudar EnginealConfig # Test.Test a partir private Test test;de private List<Test> test;, juntamente com os getters e setters. Em seguida, usando listas com um elemento, este recursão funciona.

Os seguintes application.properties com a List<Test>mudança:

engineal.x.value: Test1
engineal.x.test[0].value: Test2
engineal.x.test[0].test[0].value: Test3

output EnginealConfig{x=Test{value='Test1', test=[Test{value='Test2', test=[Test{value='Test3', test=null}]}]}}. Posso, então, acessar o próximo elemento usando test.get(0).

Assim, parece como se a recursividade é suportado somente se o tipo recursiva está em uma coleção.

Embora esta solução é ok, eu preferiria usar minha primeira maneira de fazê-lo. São / deve recursiva aulas de ser suportado sem a necessidade de uma coleção? Obrigado pela ajuda!

Publicado 20/10/2018 em 14:09
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more