問題タブ [byte-buddy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
403 参照

java - 実行時にクラスのスーパークラスを変更する

Byte Buddy を使用して、抽象クラスから継承することにより、実行時にクラスを拡張できますか?

Organization以下のような抽象クラスから継承することで、すべてのインスタンスをインターセプトして強化できるはずです。

0 投票する
1 に答える
468 参照

java - sun.reflect.GeneratedMethodAccessor1 を再定義しようとすると ByteBuddy が失敗する

好奇心に駆られて、GeneratedMethodAccessor1 (リフレクションの使用時に JVM によって生成された) のバイトコードをエクスポートしようとしました。

次の方法でクラスのバイトコードを取得しようとします。

ただし、このクラスを実行すると、次のエラーが発生します。

基本的には、最初に JVM がメソッドを拡張する (GeneratedMethodAccessor を生成する) のに十分な回数だけメソッド呼び出しを繰り返し、次にバイトコードを取得するためにクラスを再定義しようとします。

生成されたプロキシ クラスをエクスポートするために同じ方法を試しましたが、問題なく動作しました。それが私がこれを試すようになった理由です。

GeneratedMethodAccessor1 クラスの DelegatingClassLoader は、loadClass メソッドでクラスをロードしようとすると、クラスをリロードすることさえできないようです。

GeneratedMethodAccessor クラスのバイトコードを取得する方法はありますか?

0 投票する
1 に答える
694 参照

java - Byte Buddy を使用してカスタム メソッド シグネチャを効率的に作成する方法

ByteBuddy でプロファイラーを実装しようとしています。私は現在、プロファイリングしているメソッドの適切な署名を効率的に作成することに苦労しています。

これが私の現在の実装の要点です: https://gist.github.com/felixbarny/e0c64819c59368a28200

ProfilingInterceptor.profile メソッドには 2 つの実装があります。それぞれに独自の欠陥があります。

最初のものは@Origin String signature署名として使用します。ByteBuddy がそれをキャッシュしているように見えるので、これは非常に効率的です。問題は、署名の形式に満足できないことです。たとえばmethod2(I)I

@Origin(cacheMethod = true) Method method2 番目の実装では、見栄えの良い署名を注入して手動で構築していますint org.stagemonitor.benchmark.profiler.ClassJavassistProfiled.method2(int)。明らかな問題は、すべての呼び出しで署名が再作成されることです-パフォーマンスが向上しません(私のjmhベンチマークは、4倍遅いと言っています)。

たとえば、署名ごとに文字列定数を作成することにより、署名をキャッシュする方法はありますか?

前もって感謝します

0 投票する
2 に答える
1506 参照

java - byte buddy メソッド委任を、注釈付きパラメーターを持つメソッドにのみバインドする

メソッド呼び出しが自動的に検証されるように、既存のオブジェクトを装飾したいと考えています。Hibernate バリデーターを呼び出すインターセプターにメソッド呼び出しを委譲することができましたが、これまでのところ正常に動作しています。

私が改善したいのは、メソッド呼び出しを、次のような制約注釈で注釈が付けられたパラメーターを少なくとも 1 つ持つメソッドにのみバインドすることです。

Byte Buddy で ElementMatcher を指定して、@NotNull (javax.validation.constraints から取得) などの @Constraint で注釈が付けられたパラメーターを持つメソッドにのみバインドするようにするにはどうすればよいですか?

0 投票する
1 に答える
132 参照

java - アノテーション @MyFormat("%td.% を使用して getBirthday() をフォーマットするにはどうすればよいですか

サブクラスを手動で記述せずに、 @MyFormat アノテーションの値で書式設定された Date ではなく、Person インスタンスを受け取り、誕生日を文字列として返すクラスを生成するにはどうすればよいですか?

目的は、生成されたインスタンスを HTML ページの生成に使用することです。

私はこれを持っています(下記参照)。

呼び出しは式 "person.birthday" の評価からのリフレクションによって行われるため、戻り値の型が Date から String に変更されても問題ありません。

したがって、新しいクラスのメソッド名は「String getBirthday()」と同じですが、戻り値は String になります。


jszipを使用してSafari 8でzipファイルをファイル名と拡張子で保存するにはどうすればよいですか?

ライブラリzipを使用してクライアント側にファイルを保存したい。jszip

これが私のコードです:

Safari 8 を除くすべての最新のブラウザーで問題なく動作します。

Safari 8 は、ファイル拡張子を持つファイルを保存できません。

これはサンプルhttp://jsfiddle.net/uvhy34ar/3/で、この問題の動作を示しています。

0 投票する
1 に答える
256 参照

java - バイトバディコード生成

私は豆のクラスを持っています

および検証ユーティリティ:

以下のようなバリデーターを生成したいと思います-

どのフィールドが必須で、どの値が特定の数を超えてはならないかの決定は、Bean クラスを参照して実行時に行われます。

Byte Buddy でこれを行うにはどうすればよいですか?

0 投票する
1 に答える
1495 参照

java - Android : load(getClass().getClassLoader(),classLoadingStrategy) が java.lang.IllegalStateException をスローします

Androidのメソッドproxy(...)の下にbyteBuddyオブジェクトを作成し、byteBuddyオブジェクトでいくつかのメソッドを呼び出そうとしています:

しかし、次のとおりです。

ByteBuddy が例外をスローします:

java:781) 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System.err﹕ at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System.err﹕ at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System .err﹕ ... 25 more 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System.err﹕ 原因: java.lang.NoClassDefFoundError: ブート クラス ローダーを使用してクラスが見つかりません。利用可能なスタックがありません 371 12028-12028/com.example.AndroidOverlay W/System.err﹕ ... 25 more 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System.err﹕ 原因: java.lang .NoClassDefFoundError: ブート クラス ローダーを使用してクラスが見つかりません。利用可能なスタックがありません 371 12028-12028/com.example.AndroidOverlay W/System.err﹕ ... 25 more 06-11 21:29:23.371 12028-12028/com.example.AndroidOverlay W/System.err﹕ 原因: java.lang .NoClassDefFoundError: ブート クラス ローダーを使用してクラスが見つかりません。利用可能なスタックがありません

http://central.maven.org/maven2/com/google/android/tools/dx/1.7/dx-1.7.jar および byte-buddy-0.6.8.jar, byte- の dx-1.7.jar を使用していますバディ-android-0.6.8.jar

何か不足していますか?私はまた、あなたのAndroidサンプルアプリケーションで動的タイプを実行できませんでした.(Failed resolution of: Lorg/objectweb/asmType;) も取得します.

EDIT1 : Lollipop を使用しています。これが AndroidClassLoadingStrategy のセットアップ方法です。

メソッドproxy(...)があるクラスMessengerに設定します

そしてclassLoadingStrategyは次のように定義されています

編集 2: 結局、私は ByteBuddy のサンプル アプリケーションを使用して、Android lollipop を置き換えるための行を試しました

交換する必要があるこれらの1つについて、それらをすべて試してみましたが、異なるクラスアクティビティからだけで、すべて同じ例外が発生します

まだ例外:

ここでエラーを再現する可能性があるため、Web サイトのソースを作成して配置しました。

bashism.com/shared/ByteBuddyTest.tar.gz

編集3:

Android バージョン: 5.0.1 ロリポップ

デバイス: Samsung Galaxy S4

IDE: IntelliJ アイデア 14.1.3

編集4: メインアクティビティ内で変更した後:

および net.bytebuddy.android.AndroidClassLoadingStrategy 内

}

動作/安定しているようで、すぐにさらにデバッグします

0 投票する
2 に答える
1983 参照

java - 生成された bytebuddy バイトコードを表示する

ByteBuddy を使用して、動的に生成されたバイト コードを使用して実行時にクラスを作成しています。生成されたクラスは意図したとおりに動作しますが、生成されたバイト コードを手動で調べて、それが正しいことを確認したいと考えています。

例えば

ここで、MyImplementation は複数の StackManipulation コマンドをチェーンして、動的に生成されたコードを作成します。

生成されたクラスをファイルに書き出すことはできますか (IDE で手動で検査できます)、または生成されたクラスのバイトコードを出力することはできますか?