問題タブ [method-interception]
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.
aop - AspectJ AOP で内部メソッドのインターセプトを除外する方法は?
Jboss AOP (プロキシベース) を使用しているアプリケーションを、コンパイル時の織り込みで AspectJ AOP に移行しています。ただし、内部メソッドが AspectJ によってインターセプトされることは望ましくありませんが、それが AspectJ のデフォルトの動作のようです。
Spring AOP で内部メソッド呼び出しをインターセプトする方法については、複数の投稿があります。ただし、AspectJ を使用した内部メソッドの除外に関する投稿は見つかりませんでした。AspectJ のコンパイル時ウィービングを使用して、約束されているランタイム パフォーマンスの向上を実現したいと考えています。
別のクラスのメソッドが以下のクラス TestService のパブリック メソッドを呼び出す場合、その呼び出しはインターセプトされる必要があります。ただし、method1() から method2() への内部呼び出しは傍受されるべきではありません。インターセプターがオブジェクトごとに 1 回だけインターセプトするようにしたいだけです。
アスペクトの例:
Spring AOP はプロキシ ベースであるため、内部メソッド呼び出しインターセプトを除外する動作がデフォルトです。AspectJ とコンパイル時の織り方を使用して、内部メソッドのインターセプトを除外する方法はありますか?
ソフトウェアの詳細: Spring バージョン: 3.2.14。JDK バージョン: 1.8。Maven プラグイン コードハウス「aspectj-maven-plugin」バージョン 1.7 は、コンパイル時のウィービングを行うために使用されます。
c# - C# AOP を使用して実行時に外部メソッドにコードを挿入する
ソースコードを編集せずに、コードを外部メソッドに挿入したいと考えています。C# メソッドの内容を動的に置換するため、現在のメソッドを自分のメソッドを参照するように置き換えることができます .
実行時に外部メソッド本体を変更できる必要があります。これは、メソッド呼び出しの前とメソッド呼び出しの後にコードを挿入できることを意味します。
変更したいこのメソッドを手動で呼び出すことはできません。 自ら運営するサービスです。
私が試してみました:
- Reflection.Emit -> しかし、これは参照されていない新しいメソッドを作成します。
- Marshall ->
Marshal.GetFunctionPointerForDelegate
、次にメソッドを置換してから、マーシャリングされた関数を呼び出します -> 置換はポインターであり、marhal はポインターを変更するため、機能しません。
状況: