Spring 3.0 не может получить пользовательскую аннотацию во время выполнения [закрыто]


Я работаю с spring и попытался добавить пользовательскую аннотацию к объекту-Бобу. Все, что я хочу сделать, это получить доступ к полям с пользовательской аннотацией @ runtime через отражение. Проблема в том, что, хотя на полях есть несколько аннотаций, ни одна из них не доступна во время выполнения:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ChangeableField {

}

Сущность:

public class Order {

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledStart;

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledEnd;

    //...
}

Я совершенно не знаю, что делать

Order.class.getField("scheduledStart").getAnnotation(ChangableField.class);

Возвращает всегда null. (Кстати, все объявленные аннотации на этом поле являются null)

Может быть, это как-то связано с весной?

Буду признателен за любую помощь!

Заранее спасибо

EDIT

Не знаю почему, но теперь он работает нормально:

for (Field currentField : order.getClass().getDeclaredFields()) {
    if (currentField.getAnnotation(ChangeableField.class) != null
    && map.containsKey(currentField.getName())) {
         //..

Спасибо за помощь

Кстати, это была просто опечатка в этом посте..

2 3

2 ответа:

Ваша аннотация относится к классу "ChangeableField", но вы извлекаете" Changeablefield "(обратите внимание на отсутствующее"e"). Это просто опечатка в посте, или вы не получаете то, что вы думаете ?

Попробуйте это:

Order.class
     .getDeclaredField("scheduledStart")
     .getAnnotation(ChangableField.class);

Class.getField(fieldname) извлекает открытые поля класса и всех суперклассов. Ваше поле является частным, поэтому вам нужно Class.getDeclaredField(fieldname), который извлекает поля всех видимостей, но ограничивается только этим классом.