2014-12-27 4 views
0

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

Пример

public class model{ 
    @Unique 
    public CustomKey key; 
} 

Теперь я хочу, когда модель заполняется и видит эту уникальную аннотацию автоматически первый вызова кода, приведенный ниже, прежде чем продолжить: (Ниже Суда коды не реальный код Java)

public void checkUnique(){ 
    if(annotation instanceof MyAnnotation){ 
     Unique myAnnotation = (Unique) annotation; 
     checkifIsUnquie(myAnnotation.getVariableValue()); 
    } 
+0

Что вы конкретно не понимаете? Как получить доступ к аннотациям через отражение? –

+0

@VinceEmigh No. Теперь я отредактирую свой пост, чтобы вы поняли. – armin

ответ

0

Что касается отражения

Проверить этот проект: https://code.google.com/p/reflections/

Включите его в свой проект и использовать блок кода ниже, чтобы получить список всех полей аннотированных аннотацией:

Reflections reflections = new Reflections("my.project.prefix"); 

Set<Field> annotated = 
      reflections.getFieldsAnnotatedWith(SomeAnnotation.class); 

Кроме того, обратите внимание, что вам нужно, чтобы объявить класс аннотации, а именно @Unique, который должен быть сохранен во время выполнения, иначе javac будет разделять информацию аннотации на любое поле, которое вы аннотировали. Вот как это сделать:

@Retention(RUNTIME) 
public @interface Unique { } 

Но вы на самом деле нужно АОП (аспектно-ориентированное программирование) для выполнения этой

, так как в Java, вы не можете перехватывать поток кода с использованием аннотаций в одиночку. В чистой Java аннотация - это всего лишь часть информации, привязанная к классу, полю и т. Д., Которые вы можете запросить во время компиляции, времени выполнения ... И вам нужно определить логику, чтобы обрабатывать их самостоятельно. Проверьте AspectJ как библиотеку/среду Java AOP, которая позволит вам делать то, что вы хотите.

Смежные вопросы