春ASMの応用

記事のディレクトリ

背景

ASMの適用の下で、ソースコードを参照するには非常にラフな春を繰り返し、ソースコードに簡単なレコードを発見しました。
私の仕事は、ASMはかなり精通しているため、JavaAgentです。
ASMは、コードに対応する情報の操作時にのみ読み取ることができ、あなたはまた、バイトコードはかなり良いフレームです変更することができます。
ASMはきれいだったが、それでもそれは、その後、使用していないことができない、新しいロジックがパフォーマンスを消費するためにバインドされている追加し、我々はASM読み込みメソッドのパラメータの必要性を減らす、@RequestParam(「名前」)に精通しているような操作名(反射のパラメータの型が得られ、パラメータの名前ではありません)

ソースコードを見つける方法の春(ASMが唯一の手がかりはなく、ASMの使用を見つける。)で、次のアプリケーションASMの外観

登録ノートBeanDefinition

見つけ、ClassPathScanningCandidateComponentProviderにこのクラスaddCandidateComponentsFromIndex()メソッドを参照してくださいAnnotatedGenericBeanDefinition sbd = new AnnotatedGenericBeanDefinition( metadataReader.getAnnotationMetadata());コードを。
ここに画像を挿入説明
getAnnotationMetadata()メソッドは、メタ情報豆の文字通りの意味から理解されました。
SimpleMetadataReaderクラスに

final class SimpleMetadataReader implements MetadataReader {
	private final AnnotationMetadata annotationMetadata;
	@Override
	public AnnotationMetadata getAnnotationMetadata() {
		return this.annotationMetadata;
	}
}

戻り値は、インタフェースである。このフィールドは、我々が実装クラスAnnotationMetadataReadingVisitorののいずれかが表示さannotationMetadataで
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
、その後の訪問のシリーズを書き換え、単にClassVisitor統合されている事実ASM ***メソッドの内部で、直接バイトコード命令を変更することによって、方法は、実行時の技術でバイトコードを変更します。

まあ、ないだけAnnotationMetadataReadingVisitorを発見し、またClassMetadataReadingVisitorを見つけ、彼らは接尾辞を見たとき、大きな利益を得たVisitor基本的な方法アウト。
春はかなりの数、それらを書き換えるとASMで見ることができvisitvisitInnerClassvisitMethodvisitFieldなど

公開された525元の記事 ウォンの賞賛2337 ビュー217万+

おすすめ

転載: blog.csdn.net/dataiyangu/article/details/104443839