問題タブ [pointcuts]
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 - このポイントカットを改善する方法はありますか?
メソッドの入口/出口をトレースするために使用する次のポイントカットを思いつきました。それは壊れておらず、私が望むこともしますが、1-不器用に見えるか、よりエレガントになる可能性があります。2-防弾かどうかはわかりません。
何かご意見は?
java - ポイントカット表現を学ぶためのチュートリアルを提案してください
ポイントカットの表現を学ぶためのチュートリアル/チートシートを提案してください。
java - 変数を含むメソッドのAspectJポイントカット署名を照合しようとしています
ModelMapを含むWebコントローラーの任意のメソッドに一致するポイントカットを作成したいと思います。
私の問題は、これはModelMapパラメーターのみを持つメソッドにのみ一致し、他のメソッドにはパラメーターが多すぎるために一致しないことです。たとえば、「req」パラメータが原因で、これは傍受されません。
考えられるすべてのパラメーターの組み合わせに対してポイントカットデリゲートを追加せずに、すべてのメソッドをModelMapパラメーターと一致させる方法はありますか?
c# - Spring.Net パブリック プロパティ セッター ポイントカット
パブリック プロパティ セッター (標準プロパティと自動実装プロパティ) のみをインターセプトするための spring.net のポイントカット定義を知っていますか?
この後、名前 (ID、バージョンなど) でいくつかのプロパティを削除する方法はありますか?
ポイントカットを特定の基本クラス (EntityBase) の子に絞り込むことは可能ですか?
ご覧のとおり、私は spring.net ポイントカットの達人ではありません ^^ しかし、情報が見つかりません。
その背後にあるアイデアは、自動ダーティ フラグを作成することです。以下の例では、データ プロパティ セッターに対してのみ IsDirty = True を設定することを目標としています。
今のところ、Spring 構成ファイルではなくコードで定義を使用していますが、両方のソリューションで問題ないと思います。
既存のコード:
...
java - メソッドの戻り値の型にアクセスする Spring aop ポイントカット式
多くのメソッドを持つサービス インターフェイスがあり、そのすべてが Request オブジェクトを受け取り、Response オブジェクトを返します。すべてのリクエスト オブジェクトには共通の祖先があり、すべての応答オブジェクトには異なる共通の祖先 (成功フラグとメッセージ フィールドがあります) があります。
ここで、アクセス許可などをチェックし、サービス呼び出しを実行し、何かが失敗した場合に失敗コードを含む Response オブジェクトを返すというアラウンド アスペクトが必要です。問題は、作成する Response オブジェクトのタイプを知る必要があることです。戻り値の型にアクセスできるポイントカット式はありますか? もしかして、こういうこと?
java - AspectJ、コンストラクターなしの一般的なポイントカット
私はプロファイリング方法を作成しました:
そして、tld.mycompany.business.aspects.SystemArchitectureのポイントカットを次のように定義しました
と
コンストラクターと例外ではないサービスレイヤー内のすべてのメソッドをプロファイリングしたい(「初期化がサポートされていない(コンパイラーの制限)」と「初期化前がサポートされていない(コンパイラーの制限)」を取得しないようにする「警告)そして私がいくつか持っているdataType()を無視してください。
ただし、コンストラクターと例外に関する警告が表示されます。また、Javaメソッドについてアドバイスしているようです。そのため、すべての行で多くのアドバイスをヒットするため、アプリケーションのデバッグはほぼ不可能になりました。Eclipseは、profileBusinessラインだけで2747のアドバイスがあると言っています。
明らかに私は何かを誤解したに違いありませんが、何ですか?Implで終わるtld.mycompany.business階層内のクラスのすべてのメソッド(コンストラクターを除く)の周りにあるようにするにはどうすればよいですか?
乾杯
ニック
java - AspectJ: 他のプロジェクトにあるクラスにアドバイスするためのポイントカットを取得する方法
これは単純なはずです。
質問
あるプロジェクトでポイントカットを取得して、別のプロジェクト内のコード/クラスにアドバイスするにはどうすればよいですか?
コンテキスト
私は 2 つのプロジェクトで日食に取り組んでいます。説明を簡単にするために、1 つの科学プロジェクトともう 1 つの数学プロジェクトを呼び出し、科学プロジェクトは数学プロジェクトに依存しており、両方のプロジェクトで同時に開発を行っているとします。数学プロジェクトは本番環境のコア製品であり、コードをあまり変更しなければ生活は楽になります。
現在、これら 2 つのプロジェクト間の相互作用をデバッグしています。これを支援するために、数学コード (および科学コード) の実行時に重要な情報をログに記録する Aspect (科学プロジェクト内) を作成しています。
例
次の行に沿って単純なサンプル アスペクトを実行します。
問題問題は、私が作成したポイントカットに関係なく、科学プロジェクト
のコードしかアドバイスしないことです。からのクラスはクロスカットではありません。add projectに移動してクリックし、数学プロジェクトを選択して、数学プロジェクトを科学プロジェクトのinpathに追加してみました。それはうまくいきませんでしたが、それらの線に沿って何かをする必要があるようです.
org.math.example
proect properties > AspectJ Build > Inpath
事前に、ご提案いただきありがとうございます...
-g男性
編集1:
これを書いて以来、プロジェクトが次のエラーを出していることに気付きました:
したがって、これは適切に設定されている可能性があり、エラーはより微妙です。ところで、言及されたクラスは、いわば「科学プロジェクト」からのものです。これは、プロジェクトをクリーンアップした後でも発生します。私は現在、このエラーをグーグルで調べています...
編集 2:コメント #5 で
上記のエラーの解決策を見つけました 。
問題は、maven-aspectj-plugin の pom ファイルが、aspectjtools バージョン 1.6.7 への依存関係を宣言していることです。そのため、プラグインを構成するときに、その一時的な依存関係を変更する必要があります。1.6.7 ではなくバージョン 1.6.9 を指定して問題を修正する pom ファイルの関連コード スニペットを次に示します。
java - ポイントカットとAspectJの混乱
別のメソッド内から呼び出された場合にのみメソッドを検索し、直接ではないポイントカットを表現するにはどうすればよいですか?
例えば:
また
ポイントカットがFoo()内でのみ機能するようにしたい
「withincode」を試しましたが、それは直接機能するようです。
ありがとうエリック
aop - ポイントカットとアスペクト指向プログラミング
アスペクト指向プログラミング言語でポイントカットを使用して、既存のプログラムに機能を追加するにはどうすればよいですか?
私の理解では、このウィキペディアの記事から-http://en.wikipedia.org/wiki/Pointcut
ポイントカットはコード内の特定の場所に配置され、そのポイントに到達すると、ポイントカットの評価に基づいて、コード内の特定のポイントで、ポイントカットの評価に基づいてより多くのコードを実行できます。これは正しい理解ですか?
もしそうなら、プログラマーはその評価に基づいて異なるコードを実行できるため、機能が追加されます。
java - AspectJポイントカットを使用して実行前に実行されたSQLを修正できますか?
AspectJを使用してシステムで実行されるすべてのSQLに特定のSQLを追加しようとしています。
私はこれまでAspectJを使用したことがありませんが、私がする必要があるのはポイントカットを作成することだと思います
call(PreparedStatement Connection.prepareStatement(String))
アドバイスを提供します
before(Connection con、String sql):call(PreparedStatement Connection.prepareStatement(String))&& target(con)&& args(sql){sql = "exec myStordProc();" + sql; }
その後、Connection.prepareStatement()メソッドは変更された文字列を続行しますか?
または、prepareStatementとexecuteQueryの呼び出しをインターセプトし、これをaddBatch()に変更するアドバイスを作成して、保存されたprocdure呼び出しを最初のバッチSQLとして追加し、次に元のSQLをexecuteBatch()で最後に実行する必要がありますか?
任意のポインタをいただければ幸いです。
ありがとう