2016-04-14 10 views
0

Javaで計測する場合、AspectJよりもjava.lang.instrumentが優先されますが、どちらも計測器の仕事は同等です。 java.lang.instrumentを使用する利点はありますか?事前に感謝...java.lang.instrument vs AspectJ

+0

AspectJは組み込まれていませんか? – chrylis

+0

Eclipse用のプラグインライブラリ – FAZ

答えて

3

これらは2つの全く異なるものです。 Instrumentation APIは、JavaエージェントがJVMのより高度な機能にアクセスできるように、JVMランタイムにフックを提供します。また、クラスがロードされたときにエージェントに通知してそのクラスファイルを再定義できる、JVMのクラスローディングへのフックを提供します。同様に、すでにロードされているクラスを再定義/再変換することは可能です。

AspectJは、既存のクラスを再定義する際のより高いレベルのビューを提供するライブラリです。ポイントカットとジョインポイントで動作し、クラスの再定義方法を説明します。 AspectJによる再定義は、Mavenのようなツールの助けを借りてコンパイル時に適用されるか、AspectJはJavaエイジットとInstrumentation APIを使用して実行時にクラスの再定義を適用することができます。

1

AspectJAOPであり、バイトコード操作で実装すると、AOPフレームワークを比較する方が良いです。例えば。 AspectJ対Spring AOPjava.lang.instrumentはAOPフレームワークではありません。

+0

Spring AOPがAspectJ上に構築されているのと比べて、最も良い比較ではありません。 –

+0

@RafaelWinterhalterそれは絶対に真実ではありません。 SpringにはいくつかのAspectJのサポートがありますが、主なアプローチは[proxy-based]です(http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-introduction-proxies) 。 –

+0

私は、インストゥルメンテーションAPIを利用するAspectJのような低レベルのソリューションの上に構築された高レベルのコード生成を提供していることを意味します。春はピラミッドの1つ上のレベルです。 –