2010-01-20 22 views

Respuesta

40
  1. bnd tool (y maven-bundle-plugin) hace uso de las anotaciones del paquete. Poner @Version y la anotación @Export en package-info.java le permite generar metadatos OSGi.
  2. javadoc usa anotaciones de paquetes.
  3. JAXB usa anotaciones a nivel de paquete, for example, para especificar la asignación de un tipo de Java a un tipo de esquema XML en todo el paquete. Las anotaciones de paquete también se usan en el enlace xml de JBoss.
  4. El plugin Convención de Struts 2 usa an annotation para especificar un interceptor predeterminado para todas las acciones en un paquete.
  5. Hay algunos paquetes de nivel Hibernate Annotations. Un ejemplo del uso de esas anotaciones se puede encontrar here.
7

Supongo que @Deprecated tendría sentido. Y tal vez algo así como @Generated si todo el paquete fue generado por alguna herramienta de origen no Java. O @Internal si este paquete no es parte de una API pública.

Quizás las herramientas OSGi (donde necesita declarar las versiones de sus paquetes y los paquetes de los que depende) también puedan hacer uso de esto.

¿Alguien ha visto esos en la naturaleza?

4

Dos razones que se me ocurren:

  • Anotación de paquetes especiales para que algunos aspectos (por ejemplo, usando AspectJ) para tejer las clases en ellos para una funcionalidad específica.
  • Anotando algunos paquetes que algunas herramientas deben leer, por ejemplo, fuente, metadatos u otros tipos de generación de recursos.
+0

¿Quiere decir que la anotación de un paquete es equivalente a la anotación de todas las clases dentro de ese paquete de una sola vez? – Gili

+0

No, quiero decir que puede usarlo para indicar que todas las clases en ese paquete deben estar tejidas. –

+0

¿Cómo es eso diferente de lo que escribí? – Gili

1

Este no es el propósito real, pero los estoy usando como una solución para evitar la recompilación de los archivos package-info.java.

El problema es que javac (y la tarea Ant <javac>) crea ningún archivo de clase para el package-info.java si sólo hay documentación (la razón de su existencia) y la declaración package bla;, y que las recompilaciones tarea ant cada archivo para el cual no hay (o un archivo anterior) .class correspondiente.

Al agregar una anotación simulada allí (como SuppressWarnings) se produce el efecto de que se produce package-info.class y, por lo tanto, el archivo no se vuelve a compilar hasta que se lo cambie nuevamente.

(1.8.0 Ant resuelto mediante la creación de un paquete-info.class vacío, incluso si no hay anotación, pero yo estoy usando un viejo ant aquí.)

2

JAXB, por ejemplo, permite que sean most annotations normalmente se usa en un tipo que se aplica igualmente bien a un paquete.El significado en ese caso sería especificar el valor predeterminado para todas las clases en ese paquete.

Por ejemplo, si desea que todas las propiedades de todas las clases en un paquete que están expuestas a través de captadores/definidores a ser mapeados en XML puede especificar @XmlAccessorType(XMLAccessType.PROPERTY) en cada clase o simplemente especifique en el paquete.

0

Metadatos de prueba: son metadatos alrededor de los paquetes de prueba (pruebas unitarias u otros). Puede asignar varias piezas de metadatos de prueba que sean apropiadas a nivel de paquete, como: características, propietarios, versiones, errores/problemas, etc. Podrían refinarse en el nivel de clase o método, pero teniendo definiciones de nivel de paquete o valores predeterminados podría ser útil para la brevedad. He utilizado una variante de este enfoque (antes del beneficio de las anotaciones).

Un argumento similar se podría hacer para generalizada metadatos código por todas partes el mismo tipo de cosas: características, la propiedad, los defectos, información histórica, etc.

Cuestiones relacionadas