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 ответа:
Ваша аннотация относится к классу "ChangeableField", но вы извлекаете" Changeablefield "(обратите внимание на отсутствующее"e"). Это просто опечатка в посте, или вы не получаете то, что вы думаете ?
Попробуйте это:
Order.class .getDeclaredField("scheduledStart") .getAnnotation(ChangableField.class);
Class.getField(fieldname)
извлекает открытые поля класса и всех суперклассов. Ваше поле является частным, поэтому вам нужноClass.getDeclaredField(fieldname)
, который извлекает поля всех видимостей, но ограничивается только этим классом.