установить свойство базового класса в производном классе с помощью весенних аннотаций - PullRequest
1 голос
/ 08 августа 2011

У меня есть базовый класс со свойством, которое должно быть установлено в производном классе. Я должен использовать аннотации. Как это возможно? Я знаю, как это сделать с конфигурациями пружин xml, но не с аннотациями, потому что я должен написать их в свойстве?

Вот пример кода:

public class Base {
    // This property should be set
    private String ultimateProperty;

    // ....
}

public class Hi extends Base {
    // ultimate property should be "Hi" in this class
    // ...
}

public class Bye extends Base {
    // ultimate property should be "Bye" in this class
    // ...
}

Как это возможно с аннотациями?

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Некоторые параметры, в зависимости от того, что еще есть в Base:

class Base {
    private String ultimateProperty;

    Base() {
    }

    Base(String ultimateProperty) {
        this.ultimateProperty = ultimateProperty;
    }

    public void setUltimateProperty(String ultimateProperty) {
        this.ultimateProperty = ultimateProperty;
    }
}

class Hi extends Base {
    @Value("Hi")
    public void setUltimateProperty(String ultimateProperty) {
        super.setUltimateProperty(ultimateProperty);
    }
}

class Bye extends Base {
    public Bye(@Value("Bye") String ultimateProperty) {
        setUltimateProperty(ultimateProperty);
    }
}

class Later extends Base {
    public Later(@Value("Later") String ultimateProperty) {
        super(ultimateProperty);
    }
}

class AndAgain extends Base {
    @Value("AndAgain")
    private String notQuiteUltimate;

    @PostConstruct
    public void doStuff() {
        super.setUltimateProperty(notQuiteUltimate);
    }
}

Конечно, если вы действительно хотите указать имя класса, тогда

class SmarterBase {
    private String ultimateProperty = getClass().getSimpleName();
}
0 голосов
/ 08 августа 2011

Аннотации для полей связаны непосредственно с исходным кодом в классе.Возможно, вы сможете делать то, что ищете, с помощью Spring EL без аннотации @Value, но я думаю, что сложность переопределяет значение.

Шаблон, который вы можете рассмотреть, использует аннотацию @Configuration дляпрограммно настроить контекст вашего приложения.Таким образом, вы можете определить, что вводится в базовый класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...