2012-07-24 8 views
5

Ich beginne ein Projekt, das Java-Anwendungen für Erfassungszwecke instrumentieren muss (Definition - Verwendung von Variablen usw.). Es muss der Anwendung Trace-Anweisungen und etwas Logik hinzufügen und möglicherweise Anweisungen entfernen.Alternativen zu Java Bytecode-Instrumentierung

Ich habe nach Möglichkeiten des Instrument-Java-Codes gesucht und was ich immer finde, ist über Bytecode Instrumentierung.

Meine Frage ist: Es ist die einzige Möglichkeit, Java-Anwendungen zu instrumentieren? Es gibt andere Möglichkeiten, das zu tun? Was sind die Vorteile der Bytecode-Instrumentierung gegenüber den anderen?

Ich werde wahrscheinlich die Bytecode-Lösung verwenden, aber ich möchte wissen, was die Probleme mit den anderen Ansätzen (wenn überhaupt) sind, um genau zu entscheiden.

Danke!

Antwort

2

Die andere Methode nahe an wechselnden Bytecode verwendet AOP (Aspect Oriented Programming). Die Hauptbibliothek ist AspectJ, die auch meistens das Gebiet definiert.

Die dritte Option, die interessant sein könnte (da Sie gerade mit dem Programm beginnen) ist Spring. Es bedeutet, dass Sie ein wenig über IOC (Umkehrung der Kontrolle) lernen müssen, aber es bedeutet im Grunde, dass, anstatt Ihre Objekte selbst zu erstellen, Sie Feder es für Sie tun, und es hat Vorteile, weil, wenn der Frühling der Schöpfung ist kann alle möglichen Dinge in den Erstellungsvorgang einfügen, ohne dass du alles selbst in aspectj deklarieren musst.

Im Hinblick auf die Komplexität würde ich es wahrscheinlich bewerten:

  • Feder (am einfachsten)
  • aspectj
  • Bytecode Instrumentierung (am härtesten)

aber es ist genau umgekehrt, wenn Sprechen über Fähigkeiten (Macht). zum Beispiel etwas zu tun, wie Subtrahieren von Code ist nur möglich mit der letzten (glaube ich)

+0

Danke! Ich denke, ich werde AspectJ versuchen. –

2

sollten Sie überprüfen definitiv AspectJ

Von dem, was Sie beschreiben Sie in der Lage sein wird, zu tun, was man will.

Doingcode-Instrumentierung selbst ist absolut möglich, aber viel komplizierter.

Ich denke, du solltest zuerst AsepctJ ausprobieren und dich dann selbst als letzten Ausweg für die Bytecode-Instrumentierung entscheiden.

+0

Danke! Ich werde aspectJ versuchen. –

0

Siehe meine paper on building coverage tools using program transformation engines. Dieser Ansatz hat den Vorteil, dass es auf beliebige Programmiersprachen verwendet werden kann. Außerdem sieht er den Quellcode so, wie der Programmierer ihn sieht, nicht als kompilierte Byte-Codes (da Generika komplexer werden und in feinere Byte-Codes zerlegt werden, wird es schwieriger, diesen Quellcode zu verstehen, indem der Byte-Code untersucht wird).

Es ist vielleicht erwähnenswert, dass die Programmtransformation die aspektorientierte Programmierung verallgemeinert.

+0

Schönes Papier und Werkzeuge.Das Projekt ist ein akademisches Werkzeug, das auf einem neuen Testmodell basiert. In unserem Zusammenhang ist es besser, ein neues zu entwickeln. Aber danke! –