2010-11-26 13 views
12

quiero preguntar por qué se utilizan tanto las anotaciones java ... Sé que reemplazaron la configuración xml en, por ejemplo, jpa, pero ¿por qué se usa esta configuración tipo? Considere este fragmento de código: ¿Por qué las anotaciones Java?

@Entity 
class Ent{ 
    // some fields 
} 
//... somewhere in the other file far far away 
class NonEnt{ 
    // whatever here 
} 
Ahora, cuando trato de poner esto en contexto de persistencia, con el método persist EntityManager, obtengo un error de tiempo de ejecución (mejor sería obtener un error de compilación) al intentar persistir la instancia NonEnt. Existe una solución obvia para mí, obligar a las entidades a implementar alguna interfaz sin método en lugar de usar @Annotations. Pero esto no es popular entre los diseñadores de frameworks, ¿cuál es el inconveniente de esta solución?
Gracias por responder ...

+0

Es una pregunta de diseño para los desarrolladores de esta biblioteca. Tiene razón en que los errores de tiempo de compilación son mejores que los errores de tiempo de ejecución. Quizás el compilador de Java debería tener una forma de especificar las anotaciones de un argumento? Hasta que lo haga, una interfaz de marcador sería mejor. –

+1

Hay demasiadas solicitudes para cerrar preguntas hoy en día ... ¿por qué las personas no justifican las razones para cerrar una pregunta? –

+1

La compatibilidad con versiones anteriores es la causa de muchas de estas decisiones de diseño. Cuando solo tenían archivos XML, es posible que no quisieran modificar las clases de Java. Sin embargo, ahora no pueden ordenar una interfaz sin romper versiones anteriores. Con la anotación, puede usar esto O un archivo XML. Para tener una interfaz, debería cambiar todo el código para tenerlo, incluso los usuarios de XML. –

Respuesta

8

Cuando se compara con las interfaces de marcadores, anotaciones tienen algunas ventajas:

  • pueden ser parametrizado
  • son más grano fino - usted puede unir no sólo a las clases, sino también a otra elementos de clase (campos, métodos, argumentos de método, etc.)

Las anotaciones también son supuestamente menos intrusivo e, pero este punto es cuestión de gusto y discutible.

Consulte también:

5

El uso de anotaciones es mucho menos invasivo que obligar al cliente a implementar una interfaz o extender una clase.

3

Hay solución obvia para mí,

Lo que usted describe se llama "interfaz de marcador" y es un abuso de el concepto de interfaz. Sospecho que la única razón por la que lo considera obvio es por Serializable, que solo existe porque no había anotaciones en ese momento.

vigor las entidades para implementar algunos interfaz ningún método en lugar de utilizar @Annotations. Pero esto no es popular entre el diseñador de marcos, ¿cuál es el inconveniente de esta solución?

¿Cuáles son sus ventajas? Las anotaciones tienen la gran ventaja de que pueden tener parámetros, y son mucho más precisas. Las interfaces de marcador solo funcionan en el nivel de clase.

+2

ventaja es el error de compilación en lugar del tiempo de ejecución – coubeatczech

+0

@coubeatczech cierto, pero eso es un gran precio para una pequeña ganancia. Si desea compilar errores con anotaciones, use AspectJ. Le permite definir errores de compilación personalizados, basados ​​en muchos puntos de corte diferentes, incluidas las anotaciones (o la falta de ellas) –

+1

, también puede lograr lo mismo con los procesadores de anotación (apt) –

3

Citando el tutorial de java:

Anotaciones proporcionan datos acerca de un programa de que no es parte del programa sí. No tienen efecto directo en el funcionamiento del código que anotan.

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

  • Información para el compilador - Las anotaciones pueden ser utilizados por el compilador para detectar errores o suprimir advertencias.
  • Procesamiento en tiempo de compilación y tiempo de despliegue: las herramientas de software pueden anotar información de proceso a generar código, archivos XML, y así adelante.
  • Procesamiento en tiempo de ejecución: algunas anotaciones están disponibles para ser examinadas en tiempo de ejecución.

Como se puede ver, las anotaciones son una forma de especificar metadatos sobre sus tipos en Java, incluidas las interfaces, que son de ninguna manera un sustituto de los mismos.

0

Las anotaciones Java son realmente útiles cuando desea agregar algo de información adicional a su clase, método o variable de instancia. Hay muchas bibliotecas que utilizan estas anotaciones en gran medida. Estas anotaciones mantienen el código simple y legible con el poder de realizar cambios en el código en tiempo de ejecución.

Por ejemplo, si ha utilizado lombok library, que crea setter, getter y constructor en tiempo de compilación y le ahorra líneas de código y tiempo.

Cuando el compilador ejecuta el código, lomok busca todos los campos marcados con la anotación @Setter o @Getter y agrega setter y getter para ese campo en la clase.

Otro ejemplo es Junit test runner. Cómo junitit diferencia entre el método de ayuda normal en clase de prueba y una prueba. Para diferenciar entre los dos, usa la anotación @Test.

This tutorial explains how you can use java annotations to create you own test runner.

Cuestiones relacionadas