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

java - MethodDelegation による回避アドバイスの実装

私はここで説明されているメソッド委譲をとても楽しんでいます:

http://www.javacodegeeks.com/2015/01/make-agents-not-frameworks.html

これはうまく機能します:

呼び出しをインターセプトし、メソッドに渡された引数を取得できます。これは、私が達成したいことの半分です。ただし、戻り値をキャプチャする同様に簡潔な方法は見つかりませんでした。呼び出しを実行するインターセプターに Callable を渡すことができることはわかっていますが、その道をたどると、スタックトレースが台無しになる確実な方法のように思えます。

「アラウンドメソッド」パターンを実装するには、簡単で標準的な方法があるはずです。

API for reals を掘り下げる前に: 何か足りないものはありますか?

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

java - ByteBuddy IllegalStateException: 添付ファイル プロバイダーは現在の JVM に接続できません

別の値を返すために何らかのプロセスによってロードされるクラスをモックしようとしています。

私が持っていると言う

そして、いくつかのプロセスがClassA.getTheClass()戻るように呼び出した場合ClassC(もちろん実装しますIClassType

どういうわけか、Byte Buddy のホットスワップ機能を使えばこれが可能になるはずだとわかりました。しかし、エージェントのインストールに失敗します。-javaagent:C:\byte-buddy-agent-0.7.1.jar私は私に与えるスイッチで試しました

ByteBuddyAgent.install();と同様に

私のマシンで。これは OpenJDK でのみ機能しますか? 何か不足していますか?

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

java - Byte Buddy を使用して Java 8 ラムダ式の呼び出しをインターセプトする

次のように、Byte Buddy を使用して、メソッドの呼び出しと Java 8 ラムダ式の呼び出しをインターセプトしようとしAgentBuilderます。

Byte Buddy v0.7.1 を使用しています。

以下をインターセプトできますRunnable(匿名クラス)。

もちろん、通常の(非匿名) クラスとして定義されたオブジェクトへの呼び出しも含まれます。ただし、インターセプトは、次のようなラムダ式では機能しません。

ラムダ式の呼び出しも傍受するにはどうすればよいですか? 私の知る限り、Byte Buddy にはLambdaInterceptorのようなものはありません。

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

java - Byte Buddy を使用して Java および Groovy コードへのメソッド呼び出しをインターセプトする: 奇妙な java.lang.VerifyError

Byte Buddy 0.7.1 を使用して、Java (8) と Groovy (2.4.5) が混在するプロジェクトからクラスのメソッドへの呼び出しをインターセプトしようとしています。

のような特定のパッケージ内のクラスのメソッド呼び出しとその引数のための小さな「汎用ロギング フライト レコーダー」のようなものを作成するという考えですfoo

私は Byte BuddyAgentBuilderと私のカスタムLogInterceptorを使用して、アプリケーションの起動時にこれを行います。

メソッドのインターセプトは、すべての Java クラスに対して正常に機能します。@CompileStaticまた、アノテーションを持つすべての Groovy クラスで正常に機能します。

java.lang.VerifyErrorしかし、奇妙なs のような古典的な (動的な) Groovy クラスでは失敗します

何が起きてる?Byte Buddy は Groovy メソッドのインターセプトをサポートしていますか?

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

java - コンストラクターでのインターセプトにより ClassNotFoundException が発生する

で注釈が付けられたコンストラクターを傍受しようとしてい@Injectます。これは、小さな単体テストのコンテキストではうまく機能しました。ただし、Spring のような DI コンテナーのコンテキストでは、ClassNotFoundException.

根本的な原因を絞り込むことができました。インストルメント化されたクラスを呼び出すgetDeclaredConstructorsと、この例外がトリガーされます。興味深いことに、最初にそのクラスのインスタンスを作成すると、問題はなくなります。

例えば:

スタック スタック トレースは次の場所にあります: http://pastebin.com/1zhx3fVX

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

java - コンストラクタインターセプタの後と前

BEFORE コンストラクターインターセプターを作成する方法を知っています。

AFTER コンストラクターインターセプターを作成する方法を知っています。

次のインターセプターを使用します。

ただし、前後のインターセプターを作成する方法がわかりません。これが私が試したことです(メソッドですでに機能しているものに基づく単純なアプローチ):

このメソッド デリゲートを使用すると、次のようになります。

このセットアップでは、次のようになります。

完全なスタック トレース: