¿Cómo generar el código dinámicamente con anotaciones en el tiempo de compilación en Java?

StackOverflow https://stackoverflow.com/questions/7362659

Pregunta

Estoy buscando una solución para generar código. He buscado en Google, busqué en So y algunos blogs, pero no encontré una buena solución.

Me gustaría poner una anotación en mi clase y en el momento de la compilación, algunos métodos y propiedades se agregarían automáticamente a la clase.

Puntos clave de la solución que estoy buscando:

  • Código generado Personalizable (obligatorio)
  • No hay herramienta externa como apt tienen que llamarse (obligatorio)
  • Solo JDK, sin marco de terceros (OBLIGATORIO OPCIONAL)
  • Nombre de anotación Customizable (opcional)

Por ejemplo :

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}

Mi clase se vería así después de la compilación:

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}

EDITAR:
Finalmente, cambié mi tercer requisito de obligatorio a opcional y elegido Proyecto Lombok (Fácil integración con Maven y Eclipse, prácticamente no hay trabajo que hacer para usarlo).

¿Fue útil?

Solución

Mira esto Proyecto Lombok. Genera código como usted le pregunta cuando escribe:

public class MyClass {
  @Getter @Setter private String alias;
}

También hace mucho más si lo necesitas. Sé que no pidiste herramientas externas, pero básicamente recrearías esto.

Otros consejos

los herramienta de procesamiento de anotaciones ha sido integrado en javac Desde la versión 1.6 y es parte del JDK. Por lo tanto, no hay necesidad de herramientas externas al usar el API de anotación conectable. Puede generar cualquier código analizando las anotaciones personalizadas o el método/parámetro/field/declaraciones de clase utilizando el API de espejo.

La API del procesador de anotaciones dice que no debe cambiar las clases existentes. En su lugar, debe generar subclases de clases existentes y crear métodos de extensión en esas subclases.

Parece que es posible cambiar las clases de todos modos (por ejemplo, mediante el uso de bibliotecas de manipulación de bytecode), aunque eso en contraste con la especificación y podría conducir a problemas con otros procesadores de anotaciones y puede no funcionar con todos los compiladores de la misma manera.

Utilizo XML y XSLT para generar código. Se usa para EJB, la lógica y la parte crud de las vistas. No se geran en tiempo de ejecución, sino en el buildServer. Los desarrolladores pueden generar el código manualmente con fines de desarrollo de pozos. Esto se hace con el mismo comando que usa la hormiga en BuildServer.

Debido a que la generación es con XML y XSLT, es altamente personalizable.

Si google Java code generation with XSLT Te encontrarás con muchos ejemplos. Tenga en cuenta que esta técnica data de ~ 2000 y, por lo tanto, probablemente ha sido precedida por ahora por soluciones más fáciles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top