Właściwości układu sprężynowego typu rekurencyjne

głosy
1

Próbuję utworzyć klasę właściwości konfiguracyjne, które ma klasę, rekurencyjnej strukturze podobny do połączonej listy. Używam Wiosna bagażnika 2.0.6.RELEASE, a klasa jest autowired użyciu @EnableConfigurationProperties({EnginealConfig.class}).

Problem mam jest to, że tylko jeden pierwszy poziom będzie zobowiązany do badanego obiektu, x.testnigdy nie będzie ustawiony.

Korzystanie następujący plik application.properties:

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

Oraz następujące właściwości konfiguracyjnych klasa:

@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 +
                '}';
    }
}

obiekt zostanie wydrukowany EnginealConfig{x=Test{value='Test1', test=null}}. Niestety rekurencji nie działa.

Po aprowizacji próbuje różnych rzeczy, aby to działało, próbowałem zmieniając EnginealConfig # Test.test od private Test test;celu private List<Test> test;, wraz z pobierające i ustawiające. Następnie za pomocą listy z jednego elementu, to rekurencji działa.

Poniższe application.properties ze List<Test>zmianami:

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

wyświetli EnginealConfig{x=Test{value='Test1', test=[Test{value='Test2', test=[Test{value='Test3', test=null}]}]}}. Mogę następnie przejść do następnego elementu za pomocą test.get(0).

Tak więc wydaje się, że rekurencja jest obsługiwana tylko wtedy, gdy typ jest rekurencyjna w kolekcji.

Chociaż to rozwiązanie jest ok, wolałbym użyć mój pierwszy sposób to robić. Są / powinny być wspierane rekurencyjnych zajęcia bez konieczności kolekcję? Dziękujemy za pomoc!

Utwórz 20/10/2018 o 14:09
źródło użytkownik
W innych językach...                            

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