問題タブ [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 - byte-buddy を使用してパラメーター化された抽象クラスをサブクラス化する
まず、非常に印象的なバイトコード操作ライブラリーの byte-buddy から始めます。正常に動作しますが、抽象化されたパラメーター化されたクラスのサブクラス化に問題があります。
これが抽象クラスである場合:
拡張する具体的なクラスを作成したい
AbstractTask
次のアサーションを満たすために、の具体的なクラスを作成したいと思います。
このcreateConcreteImplementation
メソッドは、Byte Buddy を介してサブクラスを作成します。これが不可能な場合でも、別の方法またはこの動作に近似するための提案を歓迎します。
java - Byte Buddy でデフォルト コンストラクタを作成する方法
クラスの 1 つでいくつかのメソッド呼び出しをインターセプトしたいのですが、それらのクラスにはデフォルトのコンストラクターがありません。
次のクラスが与えられた場合、Byte Buddy をセットアップして、生成されたクラスを作成できる引数なしのパブリック コンストラクターも作成するにはどうすればよいでしょうか?
編集:これの具体的な使用例は、単体テストのセットアップを簡素化することです。
現在、常に次のように記述する必要があります。
コンテキストを自動的に設定する @Before メソッドでプロキシを作成するとよいと思いました。
少し遊んでみましたが、残念ながらうまくいきませんでした..
残念ながら、私は取得しました(おそらくctor呼び出しがまだ正しくセットアップされていないためです)
これは正しいアプローチですか?
ここでもバイトバディを使用する必要がありますか、それとももっと簡単な/他の方法がありますか?
java - 抽象基本クラスのセッターへの委譲により、ロード時に VerifyError が発生する
この質問は、私の以前の質問に関連しています: How to create a default constructor with Byte Buddy
メソッド呼び出しをいくつかのインスタンスに委譲する前に、最初にいくつかのコンテキストを設定するサブクラスを作成しています。これはすでに非常にうまく機能しており、1 つの問題が残っています。
動的に作成されたサブクラスをロードすると、次のエラーが発生します。
setTimeoutManager
これは現在私のバイト バディ セットアップです。表示されたエラーが発生する " " および " setState
" メソッドを 除いて、ほぼすべてのケースで機能します。
セッターには別のセットアップが必要ですか?
それとも抽象クラスが原因ですか?
保護されたデータへのアクセスが悪いと言っている理由がよくわかりません。プライベートフィールドを意味しますか?
私の型階層はこんな感じです。セッターを宣言する最上位の基本クラス:
拡張:
最後に、次のように拡張します。
コードが何とか理解できることを願っています。必要に応じていつでも情報を追加できます。
java - Byte Buddy の例の「getClass()」
Byte Buddy サイトから次のサンプル コードを取得し、Eclipse に貼り付けました。
getClass()
構文チェッカーによってエラーが発生し、次のメッセージが表示されます。
タイプ Object から非静的メソッド getClass() への静的参照を作成できません。
この問題を解決するにはどうすればよいですか?
java - Bytebuddy - 実行時のクラス再定義
これがバイトバディで可能なシナリオかどうか教えてください:
- Java プログラムが実行されます。
- 多くのプロパティを持つ標準の Java POJO クラスがロードされます。
- ByteBuddy - 実行時に各クラスを変更し、int や Integer などのプロパティ タイプを に置き換えます
MyInteger
。MyInteger
このプロパティの設定を傍受するためにあります。すべてのプロパティに対してセッターを使用することは必須ではないため、セッターを使用したくありません。 - を呼び出すたび
SomeClass.setSomeInt(1)
に、MyInteger で定義されたメソッドが呼び出されます。 - すべてのプロパティを元の
MyInteger
->int
およびMyInteger
->に戻しInteger
ます。
基本的に、プロパティで直接プロキシを実行します。
java - ByteBuddy と注釈
プレーンな JDK で実行されている WebServices の束があり、何かを行うためにすべてのパブリック メソッドをインターセプトする必要があります。一部のメソッドは @WebParam アノテーションを使用しています。WebService を ByteBuddy でサブクラス化すると、 @WebParam アノテーションがオーバーライド メソッドから削除され、サービスが期待どおりに機能しなくなります。
署名のサンプルはこちら
そして、これが私がByteBuddyを使用している方法です
パラメーターに注釈を付ける方法があることは知っていますが、メソッドのパラメーターに関する特別な知識が必要です (一部のパラメーターのみに注釈が付けられるため)。私がやりたいことは、オーバーライドされたすべてのメソッドのすべてのパラメーターを含むスーパークラスとまったく同じ方法で、ByteBuddy にクラスに注釈を付けるように依頼することです。
何か案は?
BR、パシ