5

のドキュメントから:

6.2.3.4。例

Spring AOPユーザーは、実行ポイントカット指定子を最も頻繁に使用する可能性があります。実行式の形式は次のとおりです。

実行(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)throws-pattern?)

モディファイアパターンが見えますか?パブリック、プライベート、プロテクトと言うことができます。そして同じ文書でそれは言う:

6.2.3.1。サポートされているポイントカット指定子

SpringのAOPフレームワークのプロキシベースの性質により、保護されたメソッドは、JDKプロキシ(これが適用されない場合)でもCGLIBプロキシ(技術的には可能であるがAOPの目的では推奨されない場合)でも、定義上インターセプトされません。結果として、特定のポイントカットはパブリックメソッドとのみ照合されます。

少し混乱していますが、modifiers-patternを使用する意味は何ですか?例を挙げてください。

4

2 に答える 2

4

そのドキュメントは現在古くなっています。最新のものはhttps://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-pointcuts-designatorsにあり、

SpringのAOPフレームワークのプロキシベースの性質により、ターゲットオブジェクト内の呼び出しは、定義上、インターセプトされません。JDKプロキシの場合、プロキシでのパブリックインターフェイスメソッド呼び出しのみをインターセプトできます。CGLIBを使用すると、プロキシでのパブリックメソッド呼び出しとプロテクトメソッド呼び出しがインターセプトされます(必要に応じて、パッケージに表示されるメソッドもインターセプトされます)。ただし、プロキシを介した一般的な対話は、常にパブリック署名を介して設計する必要があります。

ポイントカットの定義は、通常、インターセプトされたメソッドと照合されることに注意してください。ポイントカットが厳密にパブリックのみであることを意図している場合、プロキシを介した潜在的な非パブリックインタラクションがあるCGLIBプロキシシナリオでも、それに応じて定義する必要があります。

インターセプトのニーズにターゲットクラス内のメソッド呼び出しやコンストラクターが含まれる場合は、SpringのプロキシベースのAOPフレームワークではなく、Spring駆動のネイティブAspectJウィービングの使用を検討してください。これは、さまざまな特性を持つさまざまなAOP使用モードを構成するため、決定を下す前に、織りに精通していることを確認してください。

したがって、非公開アクセス修飾子には注意してください。ただし、cglibプロキシを使用する特定のシナリオでそれらを使用できます。

于 2012-08-06T07:41:47.523 に答える
0

ポイントカット宣言がアプリケーション内のどこに表示されるかを制御するために、ポイントカット宣言に関連してアクセス修飾子を使用します。

ポイントカット宣言には、通常のJavaメソッドと同じアクセス修飾子があります。

  1. パブリックでは、ポイントカットの削除はアプリケーションの側面全体に表示されます。
  2. デフォルト(修飾子は指定されていません)では、ポイントカット宣言は同じパッケージ内の他のすべての側面に表示されます。
  3. 保護されているため、ポイントカットの削除はサブアスペクトにのみ表示されます。
  4. プライベートでは、ポイントカットの削除は、宣言されているアスペクトでのみ表示されます。
于 2012-08-06T06:12:02.087 に答える