問題タブ [aspectj]
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 - Loadtime-AspectJをアプレットで動作させるにはどうすればよいですか?
AspectJ LoadTime-Weavingはエージェント/それ自体のクラスローダーを使用してJVMをロードする必要があるため、アプレットからユーザーのJVMをロード/変更する方法はありますか?または、アプレットをロードする直前(親アプレットを使用しますか?)
java - Eclipseで一連のアスペクトをどのようにデバッグしますか?
いくつかのケースでは実行されているが、他のケースでは実行されていない一連の側面があります。スタックは通常、コンテキスト情報を提供せずに次のようになります。有効にできるログもないようです。これについて助けてくれてありがとう。
aop - AspectJ: ポイントカットのパラメーター
私はAspectJを使用して、選択したクラスの引数を持つすべてのパブリックメソッドにアドバイスしています。私は次のことを試しました:
これは、少なくとも 2 つの引数を持つメソッドに対して素晴らしく機能します。
ただし、次のような方法では機能しません。
ポイントカットを変更して、両方のメソッドの実行をアドバイスするにはどうすればよいですか? 言い換えれば、「..」ワイルドカードは「0 個以上の引数」を表すと思っていましたが、代わりに「1 個以上」を意味するようです...
java - ユーザー アクションのログ記録
顧客は、ユーザーがシステムで実行する「アクション」を「記録」することを望んでいます。ほとんどの場合、作成、削除、および更新です。私はすでにトレースをログに記録するアスペクトを持っていますが、それはすべてのメソッド呼び出しをログに記録するかなり低いレベルで機能します。したがって、ユーザーが「医療ファイルを開く」ボタンをクリックすると、ログには次のように表示されます。
- closePreviousFiles("患者ゼロ")
- createMedicalFile("患者ゼロ") --> ファイル #001
- changeStatus("#001") --> 開く
望ましい結果は次のとおりです。
- 患者ゼロの医療ファイル #001 を開く
ログ ステートメントを使用して Struts2 アクションを計測することを考えていますが、疑問に思っています...それを行う別の方法はありますか? もう一度 AspectJ (またはフィルター) を使用して、ロジックを 1 か所にまとめて、ログを簡単に構成できるようにするかもしれませんが、すべてが理解しにくくなるのではないかと心配しています (つまり、「このアクションのログは間違っています。 ...一体どこで問題を探すべきですか?」)。
java - ジョインポイント call(* *.*(..)) を使用して、可能であれば引数をアドバイスに公開できますか?
私のアスペクトではjava.util.Set
、 、特にadd(Object)
とのインスタンスで特定のメソッド呼び出しをアドバイスすることにより、特定のコレクションの変更を追跡しますremove(Object)
。変更はコレクション自体には反映されないため、 を呼び出しSet.contains(Object)
たり、Set.size()
間違った結果を返したりします。
add
したがって、Set のインスタンス (とを除く) へのすべてのメソッド呼び出しをインターセプトしremove
、その呼び出しを最新のコレクションに転送したいと考えています。
もちろん、異なるポイントカットを使用して、次のような 2 つのアドバイスを定義することもできます。
それは機能しますが、かなり醜いです。私のアドバイスの本文は非常に類似しています。だから私はそれらを「結合」したいと思います。次のように、両方のポイントカットに織り込まれた単一のアドバイスを効果的に持つことができます。
これはまったく可能ですか?ポイントカットの1つでは引数を公開し(その後アドバイスで使用します)、もう1つのポイントカットには引数がないため、同封のアドバイスで「潜在的な識別子」をバインドすることは不可能に思われるため、そうではないと感じています...しかし、私は何かを見落としていて、正しい方向に私を向けることができるかもしれないことを願っています. ありがとう!
java - コンパイルされたJavaクラスの動作をaspectJですばやく変更する方法
いくつかのJavaアプリケーションに一時的に機能を追加するためにaspectJを使用する方法は? アスペクトの作成、ajc でのコンパイル、java コマンドと追加のスイッチを使用してアスペクトを適用するようなものですか?
java - 別のjarを使用してクラスをオーバーライドするにはどうすればよいですか?
顧客は、当社製品の新機能のプレビューを必要としています。彼らは、その機能を jar ファイル (パッチなど) で送信するように依頼しました。上記のjarファイルに新しいクラスを含めることに問題はありません。ただし、新しい機能を統合するために必要な既存のクラスが変更されました。製品のコア クラスを更新せずに、この新しい jar ファイルを追加したいだけです。問題は、別の jar を使用して既存のクラスをオーバーライドすることは可能かということです。もしそうなら、どのように?
前もって感謝します。
java - 選択したメソッドをプロファイリングするには、aspectj を使用します
ライブラリをプロファイリングするために、aspectj を使用したいと思います。私の計画は、プロファイリングが必要なメソッドを注釈でマークすることでした:
@Profiled("logicalUnitOfWork")
logicalUnitOfWork
そして、 を使用してプロファイリングされたコンテンツを強調表示するメソッドの前後に起動するアスペクトを用意します。
したがって、最初のポイントカットは次のようになります。ここには注釈の引数がないことに注意してください。これは、どうすればよいかわからないことの 1 つです。
プロファイリングされるメソッドは、次のように定義されます。
要するに、@Profiled
アノテーションの値をアスペクトに取り込むにはどうすればよいですか? 値に基づいてどのプロファイリングが発生するかを制限する必要はありません。アドバイスに表示される必要があるだけです。また、これを機能させるには、アノテーションの保持をランタイムに設定する必要がありますか、または代わりにクラスレベルの保持を使用できますか?
aspectj - どのアドバイスがアドバイス実行ポイントカットでキャッチされたかについての情報を取得することは可能ですか?
私のアプリケーションには、システムでのすべてのアドバイスの実行を傍受する側面があります。このようなアドバイス実行ポイントカットによって、どのアドバイスが「傍受」されているかを特定できるようにしたいと思います。
//...AdviceInspector.ajのコード
//...さらなるコード
前もって感謝します
java - ある側面でのJavaの同期とパフォーマンス
ある側面で大量のデータ収集コードを同期する必要があることに気づきましたが、パフォーマンスが非常に重要です。パフォーマンスが大幅に低下すると、ツールが破棄されます。intとlongを個別に、さまざまな配列、ArrayLists、Mapsに書き込みます。私の側面で取り上げられる関数呼び出しを行うアプリケーションの複数のスレッドがあります。パフォーマンスに悪影響を与えるので、どのようなことに注意する必要がありますか?どのコードパターンがより効率的ですか?
特に、他の多くのデータ記録メソッドを呼び出すメソッドがあります。
メソッドは主にアスペクトフィールドの増分を追加します
foo、またはbar、wozなどを個別に同期する必要がありますか、それともbar、wozなどのすべてのコードをfooに移動して、同期する必要がありますか?this
特別に作成された同期オブジェクトで、で同期する必要があります。
(この投稿を参照)、またはメソッド内の個々のデータ要素について: