問題タブ [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 に答える
2488 参照

java - JavaでByte Buddyを使用してフィールドに割り当てる方法は?

Byte Buddyのドキュメントを理解するのに苦労しています。API の学習を支援するために、この Java に相当するバイト コードを生成したいと思います。

Instrumentationフィールド割り当てを作成するために使用する正しい方法を見つけるのに苦労しました。

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

java - ByteBuddy プロキシ インターフェイス

Cglib プロキシを ByteBuddy に変換しようとしています。Cglib には、すべてのメソッド呼び出しをインターセプトするためのnet.sf.cglib.proxy.Proxyインターフェイスがあります。ByteBuddy のドキュメントを確認しましたが、そのような例は見つかりませんでした。ByteBuddy でインスタンス化するすべてのオブジェクトにこのようなインターフェイスがなければ、同じことを繰り返しています。ByteBuddy でこれを行うより良い方法はありますか?

これが私のコードスニペットの例です:

サービス:

インターセプター:

テスト:

0 投票する
3 に答える
1822 参照

java - Javaプロキシオブジェクトをjava.nio.ByteBufferインスタンスにする方法は?

java.nio.ByteBuffer実際にはプライベートクラスのインスタンスであるパブリック抽象クラスインスタンスがjava.nio.HeapByteBufferあり、呼び出しメソッドハンドラーを呼び出してアクセス許可を確認し、実際のインスタンスで呼び出されたメソッドを呼び出すプロキシオブジェクトを作成する必要があります。

問題は、java.nio.ByteBufferクラスにプライベート コンストラクターしかなく、最終メソッドもいくつかあるため、javassist.util.proxy.ProxyFactoryクラスでプロキシ インスタンスを作成できないことです。

java.nio.ByteBufferでは、これらの最終メソッドの呼び出しを含むインスタンスの呼び出しを制御するプロキシ オブジェクトを作成するにはどうすればよいでしょうか?

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

java - Java Bytecode: byte buddy によるカスタマイズされたセッター/ゲッター

バイトバディを持つフィールドの「カスタム」セッターメソッドを作成しようとしています。Buddy 独自のメカニズムにより、標準のセッター/ゲッター メソッドを非常に簡単に実装できますが、いくつかのロジックを追加してセッターを拡張する洗練された方法を探しています。

例を簡単にするために、メソッド setChanged(String) を持つクラス A があるとします。目標は、A のサブクラスを作成し、対応するアクセス メソッドを持つフィールドを追加することです。問題は、追加された各セッター メソッドから setChanged("fieldName") を呼び出したいということです。

「通常の」setter メソッドの場合、byte byddy の実装は次のようになります。

私が求めているバイトコードは次のようになります。

私の質問は: このコンテキストで FieldAccessor を再利用する方法はありますか?

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

java - Byte Buddy が IncompatibleClassChangeError を引き起こす

Byte Buddy (v0.5.2) を使用して、インターフェイスの「サブクラス」を動的に作成します (実際には、そのインターフェイスを実装するクラスを作成したいと考えています)。このクラスのインスタンスで呼び出されるすべてのメソッドは、別の (インターセプター) クラスにリダイレクトする必要があります。次のコードを使用しました (「TestInterface」は、「sayHello」メソッドを 1 つだけ宣言するインターフェイスです)。

インターセプター クラスは次のようになります。

ただし、「sayHello」メソッド (コード例の最後の行) を呼び出そうとすると、「IncompatibleClassChangeError」が発生します。スタック トレースは次のとおりです。

この問題は、インターセプター メソッドでの「MethodHandle」パラメーターの使用に関連しているようです。タイプを「メソッド」に変更すると、すべて正常に動作します。ただし、ドキュメントによると、パフォーマンス上の理由から、「メソッド」よりも「メソッドハンドル」を優先する必要があります。

エラーの原因は Byte Buddy のバグですか、それともこの場合、実際に「メソッド」パラメーターを使用する必要がありますか?