[java] Как создать пользовательскую аннотацию с кодом


0 Answers

создайте аннотацию примерно так:

 public @interface MyMessageDriven{
 }

И у вас есть интерфейс, который может применять аннотацию следующим образом:

public interface MyMessagListener {

    public void message();
}



@MyMessageDriven  
public class MyMessage implements MyMessagListener  {
   public void message(){
     System.out.println(" I am executed")
   }
} 

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

если он присутствует, используйте загруженный экземпляр для его выполнения.

  Object obj = ClassLoader.getSystemClassLoader().loadClass("MyMessage").newInstance();
  MyMessagListener mml =  (MyMessagListener) obj;
  mml.message();

Реализация прослушивателя вы можете поместить в класс MyMessage или какой-либо другой класс, который реализует MessageListener.

В этом случае необходимо обеспечить реализацию для message() того, что он собирается делать.

Но этот класс должен быть загружен, и более важным является то, как загружается ваш класс MyMessage.

Это основано на метаданных, присутствующих в классе MyMessage. Аналогичным образом в сценарии реального времени это так.

Аннотирование - это метаданные для класса, который говорит на основе предоставленных данных, что-то делать. Если эти метаданные не присутствуют в классе MyMessage, вам не нужно выполнять метод message() .

Надеюсь, что это поможет вам.

Question

Я хотел бы создать свою собственную аннотацию. Моя структура - автономное Java-приложение. Когда кто-то аннотирует свой класс pojo, «скрытый» код будет запускать методы.

Например, сегодня в Java EE имеется аннотация @MessageDriven . И когда вы комментируете свой класс с помощью @MessageDriven и, кроме того, реализуете интерфейс MessageListener, есть код, который будет вызывать onMessage(Message msg) . когда сообщение поступает из очереди / темы.

Как создать аннотацию ( @MyMessageDriven ), которая может быть добавлена ​​в pojo, а также реализовать MyCustomMessageListener .

Результат, который я желаю, является триггером «скрытого» кода (моего), который вызовет метод реализованного интерфейса (точно так же, как он работает с образцом, который я написал ниже).




Related