問題タブ [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 - インターフェイスのアノテーションに一致するSpringAOPポイントカット
Java 6 / Spring 3に実装されたサービスクラスがあり、ロールごとにアクセスを制限するためのアノテーションが必要です。
値属性としてOperationTypeという列挙型からの1つ以上の値を持つRequiredPermissionというアノテーションを定義しました。
また、次のアスペクト定義があります。
パラメータオブジェクトにはユーザー名が含まれており、メソッドへのアクセスを許可する前に、ユーザーに必要な役割を検索したいと思います。
MyServiceImplのメソッドにアノテーションを付けると、すべてが正常に機能し、ポイントカットが一致し、アスペクトが開始されます。ただし、アノテーションはサービスコントラクトの一部であり、インターフェイスとともに別のAPIパッケージで公開する必要があると思います。 。そして明らかに、サービス定義と実装(DRY)の両方に注釈を付けたくありません。
Spring AOPには、1つのインターフェースメソッド(トランザクションなど)のアノテーションによってアスペクトがトリガーされる場合があることを私は知っています。ここに特別な構文がありますか、それともそのままでは不可能です。
PS:うまく機能しているように見えるので、春の設定を投稿していません。いいえ、それらは私の元のクラス名でもメソッド名でもありません。
PPS:実際、これが私の春の設定の関連部分です:
java - ポイントカットを定義して、インターフェイスをキャプチャしますが、親インターフェイスまたはサブ インターフェイスはキャプチャしません
親またはサブインターフェイスのメソッドではなく、インターフェイスのメソッドをキャプチャするaspecJでポイントカットを定義する方法を考えていました。
methodB() のみをキャッチし、methodA() または methodC() をキャッチしないポインカットが必要です。ポイントカットにすべてのサブおよびスーパーインターフェイスをリストせずに、一般的な方法でこれを行う方法はありますか?
java - エンティティアスペクト(春)
自分の側面を定義するのに少し問題があります。get メソッドをプロファイリングしたいエンティティがたくさんあるので、次のポイントカットとメソッドを書きました。
構成でウィービングをオンにしましたが、ビジネスレイヤーに織り込む側面は問題なく機能します。私のポイントカットは正しく書かれていますか? それとも、それらを織り不可能にするエンティティについて何かがありますか? (私のエンティティには、クラス定義の前に @Entity というプレフィックスが付いています)
乾杯
ニック
java - 単純なタイプのAspectJジョインポイント
算術演算でキャッチできる定義済みのジョインポイントはありますか?
何かのようなもの:
pointcut
それらの線のいずれかをキャッチするを作成できますか?そして、どのようなコンテキストを取得できますか?
クラスの特定のメソッドで行われるすべてのint/float / double操作にを追加したいのbefore()
ですが、それは可能です。
AspectJのドキュメントで、オブジェクトの初期化とメソッド呼び出しのために定義されたジョインポイントがあることがわかります。int
オブジェクトの初期化を宣言していて、+
演算子はメソッド呼び出しとしてカウントされますか?
ありがとう!
java - AspectJで複数のボタンがある場合、ボタンのクリックをキャプチャする方法は?
複数のボタンがある場合、どのボタンがクリックされたかをキャプチャできるのだろうか。
この例では、//do something1 と //do something2 の部分に joinPoints で到達できますか?
}
java - コンパイルは AOP でどのように機能しますか?
AOP の単純なことに対する迅速な回答が必要です。
クライアント側にデプロイされたコードがあり、クライアント側のソフトウェアに必要な新しい側面を記述した場合。「元の」コードと新しい「AOP」コードで完全なソフトウェアを「再コンパイル」する必要がありますか? (aopコンパイラを使用)?
つまり、元のプログラムのソース コードと新しい AOP のソース コードが必要で、両方をコンパイルする必要がありますか?
PS: 特定の言語に限定するのではなく、一般的に質問しています。ただし、答えが言語固有でなければならない場合は、Java と AspectJ を AOP フレームワークとしましょう。
java - メソッドにコードを挿入する-Java
メソッドにコードを自動的に挿入する方法はありますか?
ゲッターとセッターを備えた次の典型的なフィールドがあり、フィールドが変更されたかどうかを記録するセッターメソッドに示されたコードを挿入し、フィールドが変更されたかどうかを追跡するために示された「isFirstNameModified」フィールドを挿入したいと思います。いいえ。
また、更新されたフィールドのセットに文字列としてfieldNameを追加した行に示されているように、メソッド自体の内部からメソッド名のサブセットを文字列として使用できるかどうかもわかりませんupdatedFields.add("firstName");
。また、フィールドが以前に変更されたかどうかを追跡するブールフィールドを追加するクラスにフィールドを挿入する方法がわかりません(セットを操作する必要をなくすために):boolean isFirstNameChanged = false;
これに対する最も明白な答えは、Eclipse内でコードテンプレートを使用することであるように思われますが、後で戻ってコードを変更する必要があるのではないかと心配しています。
編集:::::::::
上記の例の代わりに、この単純なコードを使用する必要がありました。フィールドの名前を文字列としてセットに追加するだけです。
}
java - OSGI で AOP を使用するための最適なソリューションは?
私は Equinox を使用しているので、Equinox Aspect プロジェクトは非常に簡単に思えますが、そのプロジェクトは非アクティブのようで、ドキュメントが 1 ページしかないため、最後にぶら下がってしまいます。
そのプロジェクト以外に、OSGI で AOP を使用するための多くのオプションはありません。皆さんの考えと可能性を教えてください、ありがとう:)
java - メソッド呼び出しポイントカットを使用したSpringのAspectJ Load-time Weaving?
here で説明されているように、Spring で AspectJ Load-time Weaving を試しています。サンプル コードを確認しましたが、宣伝どおりに動作します。
しかし、PerformanceAdviceのポイントカットexecution(..)
をcall(..)
セマンティクスに変更しようとすると、アドバイスが実行されなくなります。
Spring AOP がセマンティクスをサポートしていないことはわかってcall(..)
いますが、AspectJ LTW を使用しているため、ここでは当てはまりません (サンプル コードは、Spring で管理されていないオブジェクトで正常に動作します)。
誰でも光を当てることができますか?
更新: LTW が機能することを確認するために、次のシステム プロパティを pom.xml の argline 構成に追加しました。
-Dorg.aspectj.weaver.showWeaveInfo=true
-Daj.weaving.verbose=true
-Dorg.aspectj.tracing.enabled=true
-Dorg.aspectj.tracing.factory=default
-Dorg.aspectj.tracing.file=/tmp/aspectj-trace.txt
現在、running の出力にmvn test
は次の行が含まれています。
したがって、AspectJ は PerformanceAdvice を取得し、それを織り込むための 2 つの結合ポイントを見つけたようです。しかし、PerformanceAdvice の結合ポイントを に置き換えexecution(..)
てcall(..)
maven を再度実行すると、出力には最後の 2 行が含まれず、アドバイスは含まれません。実行されました。AspectJ トレースには多くのログ ステートメントが含まれていますが、あまり意味がありませんでした。エラーや警告がないかスキャンしましたが、何も見つかりませんでした。
(これらの構文はAspectJ プログラミング ガイドでそれぞれおよびとして説明されているため、単純に に置き換えることができるはずだと思いexecution(..)
ます)。call(..)
execution(MethodPattern)
call(MethodPattern)
AspectJ の最新バージョン (1.6.6) も使用してみましたが、役に立ちませんでした。
intellij-idea - IntelliJのaspectJ
intelliJでaspectJを使った簡単な例を書きたいです。そして... 私はできません。
何をどのように行うべきかを段階的に示すチュートリアルが見つかりません。
動作するコードの例が見つかりません。
誰かがこれで私を助けることができますか? リンク、または簡単な方法はありますか? メインと 1 つのアスペクトを持つ 1 つのクラス。
intellij 9.0.2、aspectj ウィーバー 2.05