問題タブ [pointcut]
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.
ruby - Pure Ruby AOP (ユーザー インタラクションに関する分析を収集するため)
こんにちは、私のアプリケーションはすでに複雑すぎて、分析コードを追加できません。
いくつかの AOP ポイントカット (いくつかの mixpanel をトリガーする) を挿入できるようにする特別なクラスを本当に設計したいと考えています。
私は宝石を使いたくありません。純粋なルビーだけです。モジュール、懸案事項、メタプログラミングなどを使用します。
before、around、after のコールバックだけを使用するだけでは十分ではありません。
何か案が?ありがとう
spring - クラスを無視することを含む春のポイントカット
Spring AOP のすべてのクラスのポイント カットがあります。
@Pointcut("実行(* com.company.app..*(..))")
ここで、com.company.app.IgnoreClass などのクラスを除外する必要があります。誰かがポイントカットを書くのを手伝ってくれませんか?
spring - Spring パフォーマンス インターセプターが log4j2 でログを記録しない
spring aop t を使用してサービス実行時間を記録しましたが、記録していません。私も例外はありません。log4j2 構成の問題であるか、ポイント カット式が間違っているかどうかにかかわらず、この問題を解決するのを手伝ってください。
以下は私のapplication-context.xmlです
以下は私のlog4j2.xmlです
java - AspectJ ポイントカットを読んで理解していますか?
サービスという名前のこのポイントカットは、サーバー オブジェクトのパブリック メソッドが呼び出されたときに、プログラムの実行中のポイントを選択します。また、サービス ポイントカットを使用するすべてのユーザーが、メソッドが呼び出されている Server オブジェクトにアクセスできるようになります。( https://eclipse.org/aspectj/doc/released/progguide/language-anatomy.htmlから取得)
私は AspectJ のポイントカットを理解しようとしていますが、現時点ではかなり混乱しています。私の主な質問は、上記のポイントカットをどのように読み、その意味をどのように「パズル」しますか?
私の混乱を説明するために、ゼロから構築してみましょう。
次のポイントカットは、任意のオブジェクトへのすべてのパブリック メソッド呼び出しをインターセプトしますよね?
さて、これはどうですか:
Server オブジェクトのパブリック メソッドが呼び出されると、任意のポイントがインターセプトされると思います。
では、ここから最初の例 0 に到達するにはどうすればよいでしょうか。で、どうやって読むの?
ポイントカットを構築するときに、最初にパラメーター リストを提供しますか?
上の2番と同じですか?(私はそれが機能しないと感じています。もし機能した場合、番号 1 のように、すべてのパブリック メソッド呼び出しを「インターセプト」します。)とにかく、次は同じでしょうか? (私はs
まだネイティブのポイントカットで「キャプチャ」していないので、実際に定義することはできませんね?)
または、次のように、ターゲット オブジェクトを「キャプチャ」するために、ネイティブ ポイントカットを指定することから始めますか。
任意のオブジェクトのすべてのパブリック メソッド呼び出しをまだインターセプトすると思いますか?
以下は、Server オブジェクトの呼び出しのみをインターセプトし、そのオブジェクトを "キャプチャ" するために機能しますか?
ここで、元のポイントカットに戻ります。
と同じですか
要約すると、0 の解読をどのように開始しますか?
最初にポイントカットを見てtarget
、次にポイントカットのパラメータータイプを見て、 services
「裏返し」/「右から左」に読みますか? それとも、最初にパラメータ リストを調べてから、services
ポイントカットを調べて、引数がどこから来たのか (つまりtarget(s)
) を調べますか?
それとも、これを複雑にしすぎていますか?これを理解するのに役立つ重要な部分がどこかに欠けていますか?
編集:Server s
マニュアルでは左から右に説明していますが、まだ「実行」していない場合、パラメータへの引数はどこから来るのtarget(s)
でしょうか?
java - AspectJ はポイントカットで多くのメソッドを作成します
私はAOP(AspectJ / ajcを使用)を初めて使用し、パズルの答えを求めてインターネットの高低を検索/グーグルで検索しました。うまくいけば、ここの誰かがそれを持っているかもしれません。
ドキュメントで理解できたように、AspectJ はコードを挿入することになっています。ただし、私の経験からすると、ほとんどがコードを追加しているように見えます (そして、単にメソッド呼び出しの交換を行っているだけです)。
たとえば、メソッドがある場合:
そして、次のようなアドバイスを定義します (proceed() と他の戻り値を操作するためのダミー ランダムを使用):
jd-gui を使用して逆コンパイルすると、次のようになります。
もしそうなら?私は何か間違ったことをしているのだろうか?
Android アプリケーションで ajc を使用してみましたが、いくつかの jar と SDK のおかげで、「メソッドが多すぎる」という恐ろしい問題が発生しました。
ほとんどの場合、呼び出しポイントカットを使用していますが、同じクラスとメソッド内で実行されたとしても、呼び出しごとにこれらの余分なメソッドが追加されているようで、コード サイズとメソッド数が大幅に増加しています。
これが正しいかどうか、またそれがどのように機能するかを理解するのに役立つことは大歓迎です!
java - アスペクトJを使用してJLabelsを赤くするにはどうすればよいですか?
私のプロジェクトには MessageUtil クラスがあり、メッセージを表示するメソッドがあります。aspectJ を使用して Jlabels のテキストを赤くしようとしています。aspectJ を使用せずに、multiLabel を作成するメソッドの 1 つに「for ループ」を追加するだけで十分です。メール:
createMultiLabelByPixel(msg) と createMultiLabelBySlashN(msg) の 2 つのメソッドは次の形式です。
メソッドcreateMultiLabelの本体でforループを使用せずに、aspectJを使用してJLabelsを赤くしたいのですが、これを行う方法がわかりません。pointCutでaspecJアノテーションを含むクラスを作成しようとしていますメッセージが createMultiLabelBySlashN() および createMultiLabelByPixel() にパラメーターとして送信される前に、配列メッセージを赤くするために以下を使用しますが、それが正しいかどうか、または私のアスペクトでメソッド createMultiLabel から JLabel メッセージ [] を定義する方法がわかりません。クラスで同じ for ループを使用して赤くし、文字列の結果を createMultiLabelBySlashN に送信します。
pointCut を呼び出している場合でも、コードに次のようなエラーがあるようです。
java - AspectJでクラスを照合するときの* +と*の違いは?
次のリソースから取得したこれらのポイントカットを考えると:
http://maverick-amey.blogspot.ru/2007/12/using-cflow-and-cflowbelow-in-pointcuts.html
methodCallFromWebTier
ポイントカットは、(&& 演算子) 呼び出しが のメソッドに対して行われる呼び出しの制御フロー内にある場合、void を返す引数を持つクラスのパブリック メソッドに対して行われるすべての呼び出しと一致することになってFoo
います。
- com.webtierパッケージ内の任意のクラス (およびそのサブクラス) 。
- com.webtierパッケージ内の任意の抽象クラス (そのサブクラス) 。
- com.webtierパッケージ内の任意のインターフェースのcom.webtierパッケージ内の任意のインターフェース実装。
さて、ポイントカットが代わりにこれだったとしたら:
したがって、+サブタイプの TypePattern 演算子がなければ、ポイントカットは同じになるでしょうか? つまり、すべてがcom.webtierパッケージ内にある限り、すべて(任意のクラス、抽象クラスのサブクラス、インターフェイスの実装) と一致するため、ここで+記号の使用法が実際にはわかりません...
私が間違っている?おそらく私が見ていないいくつかのエッジケースはありますか?
この例ではプラス記号が本当に必要ですか?
注目してくれてありがとう!