問題タブ [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.
java - JavaでByte Buddyを使用してフィールドに割り当てる方法は?
Byte Buddyのドキュメントを理解するのに苦労しています。API の学習を支援するために、この Java に相当するバイト コードを生成したいと思います。
Instrumentation
フィールド割り当てを作成するために使用する正しい方法を見つけるのに苦労しました。
java - ByteBuddy プロキシ インターフェイス
Cglib プロキシを ByteBuddy に変換しようとしています。Cglib には、すべてのメソッド呼び出しをインターセプトするためのnet.sf.cglib.proxy.Proxyインターフェイスがあります。ByteBuddy のドキュメントを確認しましたが、そのような例は見つかりませんでした。ByteBuddy でインスタンス化するすべてのオブジェクトにこのようなインターフェイスがなければ、同じことを繰り返しています。ByteBuddy でこれを行うより良い方法はありますか?
これが私のコードスニペットの例です:
サービス:
インターセプター:
テスト:
java - Javaプロキシオブジェクトをjava.nio.ByteBufferインスタンスにする方法は?
java.nio.ByteBuffer
実際にはプライベートクラスのインスタンスであるパブリック抽象クラスインスタンスがjava.nio.HeapByteBuffer
あり、呼び出しメソッドハンドラーを呼び出してアクセス許可を確認し、実際のインスタンスで呼び出されたメソッドを呼び出すプロキシオブジェクトを作成する必要があります。
問題は、java.nio.ByteBuffer
クラスにプライベート コンストラクターしかなく、最終メソッドもいくつかあるため、javassist.util.proxy.ProxyFactory
クラスでプロキシ インスタンスを作成できないことです。
java.nio.ByteBuffer
では、これらの最終メソッドの呼び出しを含むインスタンスの呼び出しを制御するプロキシ オブジェクトを作成するにはどうすればよいでしょうか?
java - Java Bytecode: byte buddy によるカスタマイズされたセッター/ゲッター
バイトバディを持つフィールドの「カスタム」セッターメソッドを作成しようとしています。Buddy 独自のメカニズムにより、標準のセッター/ゲッター メソッドを非常に簡単に実装できますが、いくつかのロジックを追加してセッターを拡張する洗練された方法を探しています。
例を簡単にするために、メソッド setChanged(String) を持つクラス A があるとします。目標は、A のサブクラスを作成し、対応するアクセス メソッドを持つフィールドを追加することです。問題は、追加された各セッター メソッドから setChanged("fieldName") を呼び出したいということです。
「通常の」setter メソッドの場合、byte byddy の実装は次のようになります。
私が求めているバイトコードは次のようになります。
私の質問は: このコンテキストで FieldAccessor を再利用する方法はありますか?
java - Byte Buddy が IncompatibleClassChangeError を引き起こす
Byte Buddy (v0.5.2) を使用して、インターフェイスの「サブクラス」を動的に作成します (実際には、そのインターフェイスを実装するクラスを作成したいと考えています)。このクラスのインスタンスで呼び出されるすべてのメソッドは、別の (インターセプター) クラスにリダイレクトする必要があります。次のコードを使用しました (「TestInterface」は、「sayHello」メソッドを 1 つだけ宣言するインターフェイスです)。
インターセプター クラスは次のようになります。
ただし、「sayHello」メソッド (コード例の最後の行) を呼び出そうとすると、「IncompatibleClassChangeError」が発生します。スタック トレースは次のとおりです。
この問題は、インターセプター メソッドでの「MethodHandle」パラメーターの使用に関連しているようです。タイプを「メソッド」に変更すると、すべて正常に動作します。ただし、ドキュメントによると、パフォーマンス上の理由から、「メソッド」よりも「メソッドハンドル」を優先する必要があります。
エラーの原因は Byte Buddy のバグですか、それともこの場合、実際に「メソッド」パラメーターを使用する必要がありますか?