una objetos instanciar instancia ejemplos dinamicamente crear como clases clase java annotations generated-code

objetos - ¿Cómo generar código de forma dinámica con anotaciones en tiempo de compilación en Java?



instanciar clases dinamicamente java (3)

Estoy buscando una solución para generar código. Busqué en Google, busqué 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án automáticamente a la clase.

Puntos clave de la solución que estoy buscando:

  • Código generado personalizable (OBLIGATORIO)
  • No se debe llamar ninguna herramienta externa como apt (OBLIGATORIO)
  • Sólo JDK, sin marco de terceros (OPCIONAL OBLIGATORIO )
  • Nombre de la anotación personalizable (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 escogí el proyecto Lombok (fácil integración con Maven y Eclipse, prácticamente no hay trabajo que hacer para usarlo).


Yo uso XML y XSLT para generar código. Se usa para EJB, Logic y la parte CRUD de las vistas. No se genera en tiempo de ejecución sino en el servidor de compilación. Los desarrolladores pueden generar el código manualmente para fines de desarrollo de pozos. Esto se hace con el mismo comando que ANT usa en el servidor de compilación.

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

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


Eche un vistazo al Proyecto Lombok . Genera código cuando preguntas cuando escribes:

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

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


La herramienta de procesamiento de anotaciones se ha integrado en javac desde la versión 1.6 y es parte del JDK . Por lo tanto, no hay necesidad de herramientas externas cuando se utiliza la API de Anotación Conectable . Puede generar cualquier código analizando anotaciones personalizadas o declaraciones de método / parámetro / campo / clase utilizando la API Mirror .

Sin embargo, no puedes / no deberías cambiar las clases existentes. Los métodos de extensión se pueden generar creando subclases.