2012-02-17 22 views
6

Solo estoy buscando escribir alguna anotación que se pueda ejecutar en tiempo de ejecución, antes o inmediatamente después de que se invoca un método de servicio.¿Cuándo se ejecutan las anotaciones de Java?

No sé si se ejecutan en tiempo de ejecución o en tiempo de compilación.

Respuesta

9

Las anotaciones no se ejecutan; son notas o marcadores que son leídos por varias herramientas. Algunos son leídos por su compilador, como @Override; otros están incrustados en los archivos de clase y leídos por herramientas como Hibernate en tiempo de ejecución. Pero ellos no hacen nada ellos mismos.

En su lugar, podría estar pensando en assertions, que se puede usar para validar las condiciones previas y posteriores.

2

Las anotaciones no tienen ningún efecto en su código, están aquí para proporcionar información que será evaluada por el compilador u otras herramientas.

Anotaciones tienen un número de usos, entre ellos:

Información para el compilador - Las anotaciones pueden ser usados ​​por el compilador para detectar errores o suprimir las advertencias.

Procesamiento en tiempo de compilación y en tiempo de despliegue: las herramientas de software pueden procesar la información de anotación para generar código, archivos XML, etc.

Procesamiento en tiempo de ejecución: algunas anotaciones están disponibles para examinarse en tiempo de ejecución.

Ver esto page.

0

De hecho, se pueden leer en ambos entornos, según la política de retención que establezca.

6

En realidad, cuando define una anotación, debe especificar el parámetro @Retention, que define si la anotación está disponible en el código fuente (SOURCE), en los archivos de clase (CLASS) o en tiempo de ejecución (RUNTIME).

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation {} 
5

Las anotaciones son tan solo marcadores. No ejecutan y hacen nada.

Puede especificar diferentes políticas de retención:

  • FUENTE: anotación retuvo sólo en el archivo de origen y se desecha durante la compilación.
  • CLASE: anotación almacenada en el archivo .class durante la compilación, no disponible en el tiempo de ejecución.
  • RUNTIME: anotación almacenada en el archivo .class y disponible en el tiempo de ejecución.

Más aquí: http://www.java2s.com/Tutorial/Java/0020__Language/SpecifyingaRetentionPolicy.htm

0
  1. anotaciones son únicos marcadores en el código fuente. Serán utilizados por herramientas como IDE, compilador o procesadores de anotación.

  2. Puede definir con @Retention si una anotación debe evaluarse en el origen, la clase o el tiempo de ejecución.

  3. Si desea definir sus propias anotaciones y solo usted tiene el conocimiento de qué debe hacer la anotación, también debe escribir un procesador de anotación. (pero esto no es simple - tal vez)

Cuestiones relacionadas