2010-03-28 16 views

risposta

6

La migliore risposta alla tua domanda sarà regolata dalle tue esigenze e obiettivi specifici; se riesci ad espandere ciò che stai cercando di ottenere, posso forse offrire una risposta più personalizzata.

In luogo di questo, però, nella mia esperienza, ASM offre probabilmente la migliore combinazione di maturità, flessibilità e facilità d'uso:

  • E 'in fase di sviluppo relativamente attivo: anche se l'ultima release è dal giugno 2009, gli sviluppatori fanno regolarmente commit per i loro VCS.
  • È già ampiamente utilizzato in numerosi prodotti Java, come AspectJ, Groovy, Cobertura e molti altri, il che promette un'ampia base di utenti e quindi un'ampia community di supporto.
  • È abbastanza ben documentato e sono disponibili una serie di esercitazioni, guide utente e documenti di riferimento sia dallo OW2 Consortium sia dalla comunità in generale.

N.B. Il commento @Yuri qui sotto descrive una situazione che personalmente non ho ancora incontrato ma che potrebbe potenzialmente rappresentare un ostacolo significativo. Tieni a mente la sua osservazione/esperienza mentre valuti le varie librerie di manipolazione bytecode.

+0

Siamo spiacenti per la mancanza di dettagli nella domanda. Preferirei non dare le specifiche di quello che sto facendo, ma la tua risposta è stata molto utile. Grazie. Penso che finirò per usare ASM. – Daniel

+1

Guardando questa risposta ho provato ASM e questo (4.0) ha un bug o un comportamento davvero strano. Sto usando Tree API e sto iterando sulle istruzioni del metodo InsnList. Ora, la prima iterazione dà un risultato e un'altra iterazione identica dopo la prima dà un altro risultato: un'istruzione viene duplicata e posta in cima alla lista. Nessun codice di modifica, solo due iterazioni una per una. Passare a Javassist. –

+0

@YuriUshakov: Questa non è una situazione che ho vissuto personalmente. Grazie per il testa a testa! – RTBarnard

4

Questo dipende in realtà da come si definisce intuitivo ;-) Ho iniziato a utilizzare ASM due settimane fa per una determinata attività sul mio progetto corrente e ha funzionato come un incantesimo. Mi ci sono voluti solo un paio d'ore per capirlo ed essere in grado di usarlo, ma non definirei l'API intuitivamente. Ma se conosci un po 'di codice bytecode Java e conosci il modello del visitatore, la curva di apprendimento non è molto alta, IMO.

Un altro vantaggio di ASM è che è apparentemente in bundle con l'API standard almeno in Sun JDK, anche se in un pacchetto diverso (com.sun.xml.internal.ws.org.objectweb.asm e subpackages).

+0

Hai ragione: a giudicare da alcune delle API bizzarre là fuori, le definizioni delle persone di intuitivo sembrano differire ampiamente;). Ho appena passato un po 'di tempo a guardare ASM, e sono molto meno intimidito di quanto mi aspettassi! Penso che resterò fedele. Grazie per la tua risposta. – Daniel

+0

Si prega di non utilizzare pacchetti di implementazione ... –

+1

Sì, giusto, non usare pacchetti di implementazione. E non manipolare neanche il bytecode, a meno che non sia davvero necessario ;-) –