問題タブ [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.

0 投票する
4 に答える
34208 参照

spring - 複数のパッケージに単一のポイントカットを指定する方法

spring mvc ベースのアプリケーションでアクティビティをログに記録するために Aspect を使用しています。@controllerアノテーションを使用して、アプリケーション内のコントローラーを定義しています。私は2つの異なるパッケージに2つの異なるコントローラーを持っています

  • com.package1 にはコントローラー 1 クラスが含まれています。名前を AController にしましょう。
  • com.package2 にはコントローラー 2 クラスが含まれています。名前を BController としましょう。

を使用して、コントローラーの特定のパッケージにアスペクトを適用できます

私の質問は、 expression(* package1. . . (..))**で複数の異なるパッケージを指定する方法です。

現在、パッケージごとに 1 つの個別のポイントカットを宣言しており、側面では、各ポイントカットに対して 1 つの個別aop:beforeaop:afterエントリを宣言しています。しかし、これは複数のパッケージのポイントカットを定義する理想的な方法だと思います。

0 投票する
3 に答える
1074 参照

multithreading - 同じクラスの別のメソッドによって呼び出されるメソッドに対してアスペクト アドバイスを実行する方法

Spring AOP について困っています。アスペクトを使用してメソッドをトリガーしようとしていますが、アスペクトをトリガーするメソッドも同じクラスのメソッドであり、アスペクトが機能していません(ちなみにエラーはありません)。このように

どんなアイデアでも大歓迎です

ありがとう

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

java - Spring AOP ポイントカットが抽象メソッドに適用されない

私は次のポイントカットを持っています:

そして、次の抽象クラス:

私のポイントカットは、Poller.doPoll() ではなく、Poller.toString() を呼び出した場合にのみ適用されます。Poller クラスまたはそのサブクラス内で任意の数の引数を取る任意のメソッドに適用されることを期待しています。そうでないのはなぜですか?

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

spring - Spring @RequestMapping へのポイントカット

Spring プロジェクトで AOP を有効にしようとしています。@RequestMapping が完了した後にコード (セッションクリーニング) を実行したい。これが私のapplicationContext.xmlです(参照されたリソースをロードするだけです

セキュリティ コンテキスト:

私のサービスコンテキスト:

私のWebコンテキスト:(短さのために省略されたBean定義!!)

これはアスペクトクラスのインターフェースです

実装は簡単 です @Before("pc()") public void print(){ System.out.println("About to make call to print Hello World" }

次のような他の表現も試しました。

  • @Pointcut("execution(@org.springframework.web.bind.annotation.RequestMapping public * appname.*(..))")
  • その他多数

運がない。問題は式ではなく (すでに 10 ~ 15 の型を試しました...)、コンテキストで考慮されていないクラスだと思い始めました。

答えについては、次の点を考慮してください。

  • appname という名前は、明らかに意図されたものです。
  • aop:config と aop:aspectj-autoproxy を挿入するのは試しにすぎません。他のスレッドで、applicationContext によってロードされるすべてのファイルで構成を有効にする必要があることも読んだからです。私も1つだけ挿入しようとしましたが、結果はありませんでした
  • コントローラーには、注釈付きインターフェース + 注釈付き実装があります。インターフェイスに注釈を付けたり、完全に削除したりせずに試してみましたが、結果はありませんでした

助けはありますか?:)

編集: axtavt への応答で..申し訳ありませんが、web.xml を追加するのを忘れていました。ここにその一部があります

web-context.xml ファイルを介して contextConfigLocation を正しくロードします。すいません忘れてました(-_-;)

EDIT2:axtavtの提案により、私の間違いに続いて答えが得られました!ありがとう!

0 投票する
5 に答える
17278 参照

spring - 注釈付き引数の Spring AOP ポイントカット

次のようなメソッドがあるとします。

@CustomAnnotation で注釈が付けられた引数を持つすべてのメソッドを選択できるポイントカット式はありますか? もしそうなら、「値」引数にアクセスする方法はありますか?

0 投票する
0 に答える
188 参照

aop - コンテキスト(ApplicationContext)を引数としてlogBefore Method(Aspectのメソッド)に渡す方法は?

遅延読み込みの問題を回避するアスペクトを実装したい。では、logBefore メソッドの引数として context(Application Context) を渡す方法は? 署名ポイントカットは、上記のメソッド (「???」を作成する場所) を定義し、このメソッド (logBefore) が結果タイプとして「Set」および「slm. aoa.buisiness.facade」をパッケージとして

ご協力ありがとうございます。

0 投票する
2 に答える
2333 参照

java - 継承によるポイントカットの混乱

メソッドのすべての実行に一致するポイントカットを書くことに混乱しています。class のすべてのメソッド実行に一致するはずのポイントカットを試しましたAlpha:

次のクラス階層で

Main-program が -instance を呼び出す場合、alphaMethodアドバイスBetaは期待どおりに呼び出されbetaMethodますalphaMethodが、アドバイス内で呼び出す Main-program 呼び出しは呼び出されず、その理由がわかりません。

アスペクト定義:

メインメソッド:

0 投票する
0 に答える
2830 参照

java - 継承されたものを含むクラスのすべてのメソッドのポイントカット

私はaopとaspectjをいじっていて、(私にとって)予期しない動作を発見しました。

spectj-docsで、次の example-pointcut を見つけました。

次のクラス定義の場合 (元の例を少し変更しました):

その例の説明には次のように記載されています。

[ポイントカット] は、void を返し、Middle で宣言または継承された引数を持たない public メソッドのすべてのメソッド実行を選択します。これらのメソッドが Middle のサブクラスでオーバーライドされている場合でも同様です。

この例は私にとってはうまく機能していますが、クラスSubがオーバーライドされていない場合m()、外部からインスタンスへのメソッド呼び出しmSub傍受されません。これはドキュメントに違反していませんか?

プロキシの使用が原因で、継承されたクラスのポイントカットで別の問題が発生しました。ただし、この場合、プロキシを使用してもこの動作が発生することはありません。これは、プロキシがプロキシされるすべてのクラスにメソッドを提供する必要があるためです。それとも私は何かを逃しましたか?

私のアスペクト定義:

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

java - AspectJ で特定のアノテーションを持たないメソッドを一致させる方法

@Invisible というカスタム アノテーションがあります。ここで、@Invisible アノテーションを持たないメソッドのすべての呼び出しに一致させたいと考えています。これどうやってするの?(注釈スタイル開発あり)

私の最初の試みは:

しかし、これはうまくいかないようです...

言い換えれば、メソッドに Invisible アノテーションがある場合、それを無視したいということです。それ以外の場合は、アドバイスに従っていくつかのコードを実行したい...