2010-03-28 10 views

Respuesta

6

La mejor respuesta a su pregunta se regirá por sus necesidades y objetivos específicos; si puede ampliar lo que está tratando de lograr, quizás pueda ofrecer una respuesta más personalizada.

En lugar de eso, sin embargo, en mi experiencia, ASM ofrece probablemente la mejor combinación de madurez, flexibilidad y facilidad de uso:

  • Es en fase de desarrollo relativamente activa: a pesar de que la última versión es de junio de 2009, los desarrolladores hacen compromisos regularmente con sus VCS.
  • Ya se usa ampliamente en varios productos destacados de Java, como AspectJ, Groovy, Cobertura y muchos otros, lo que promete una amplia base de usuarios y, por lo tanto, una amplia comunidad de soporte.
  • Está bastante documentado, y hay una serie de tutoriales, guías de usuario y documentos de referencia disponibles tanto del OW2 Consortium como de la comunidad en general.

N.B. El comentario @Yuri a continuación describe una situación que personalmente aún no he encontrado, pero que puede representar un obstáculo significativo. Tenga en cuenta su observación/experiencia al evaluar las diversas bibliotecas de manipulación de códigos de bytes.

+0

Disculpa por la falta de detalles en la pregunta. Preferiría no dar los detalles de lo que estoy haciendo, pero tu respuesta fue bastante útil. Gracias. Creo que terminaré usando ASM. – Daniel

+1

Al mirar esta respuesta, probé ASM y (4.0) tiene un error o un comportamiento realmente extraño. Estoy usando Tree API e iterando sobre las instrucciones del método InsnList. Ahora, la primera iteración da un resultado y otra iteración idéntica después de la primera da otro resultado: una instrucción se duplica y se coloca en la parte superior de la lista. Sin código de modificación, solo dos iteraciones, una por una. Cambiando a Javassist. –

+0

@YuriUshakov: Esa no es una situación que haya experimentado personalmente. ¡Gracias por el aviso! – RTBarnard

4

Eso realmente depende de cómo se defina intuitiva ;-) empecé a usar hace ASM dos semanas para que una determinada tarea en mi proyecto actual y funcionó como un encanto. Solo me llevó un par de horas entenderlo y poder usarlo, pero no llamaría intuitivamente a la API. Pero si conoce un poco sobre bytecode de Java y está familiarizado con el patrón de visitante, la curva de aprendizaje no es muy alta, IMO.

Otra ventaja de ASM es que aparentemente se incluye con la API estándar al menos en Sun JDK, aunque en un paquete diferente (com.sun.xml.internal.ws.org.objectweb.asm y subpaquetes).

+0

Tiene razón: a juzgar por algunas de las API raras, las definiciones de intuitivo parecen diferir ampliamente;). ¡Acabo de pasar un poco de tiempo mirando a ASM, y estoy mucho menos intimidado de lo que esperaba! Creo que me quedaré con eso. Gracias por tu respuesta. – Daniel

+0

No utilice paquetes de implementación ... –

+1

Sí, claro, no use paquetes de implementación. Y tampoco manipules bytecode, a menos que realmente tengas que hacerlo ;-) –