@Aspect public class Aspect { @Before("execution(* com.test.*.*(..))") public void logBefore(JoinPoint joinPoint) { logEnter..... } @After("execution(* com.test.*.*(..))") public void logAfter(JoinPoint joinPoint) { logExit..... } }
Spring config:
<aop:aspectj-autoproxy/> <bean id="aspect" class="com.test.Aspect"></bean>
私は最近プロジェクトを開発しましたが、開発プロセス全体でプロジェクトが急いでいたため(どのプロジェクトもほぼ同じです)、プロジェクトは途中でシステムログ機能が欠落していることに気づきました。最終段階では、システムは各モジュールのコードに直接記述され、ログの一部がページ上で表示されます。このシステムにはこの要件がないため、主に記録されるデータには、操作時間、操作対象、操作方法、操作の一部のパラメーター、および操作結果が含まれます。最初にすぐに思いついたのは、アスペクトを使用して aop ロギングを実装することでした。しかし、実際のアプリケーションでは、アスペクトは友好的な方法でアクションを傍受することはできず、主にサービス層のビジネスを傍受するために使用されることがわかりました。システムのフレームワークは ssh フレームワークに基づいているため、最終的には struts2 の組み込みインターセプター Interceptor の使用を検討しました。
何のインターセプターですか?
InterceptorはAction呼び出しを動的にインターセプトするオブジェクトです。これは、開発者がアクションの実行前後に実行されるコードを定義したり、アクションの実行前にアクションの実行を防止したりできるメカニズムを提供します。また、アクションの再利用可能な部分を抽出する方法も提供します。インターセプターと言えば、誰もが知っておくべきもう 1 つの言葉があります。インターセプター チェーン (Interceptor Chain、Struts 2 ではインターセプター スタックと呼ばれます) です。インターセプタ チェーンは、インターセプタを特定の順序でチェーンに接続するものです。インターセプトされたメソッドまたはフィールドにアクセスすると、インターセプター チェーン内のインターセプターが、以前に定義された順序で呼び出されます。
インターセプターの原理と一般的なプロセス
1. ActionInvocation が初期化されると、アクションに関連するすべてのインターセプターが設定に従ってロードされます。
2. ActionInvocation.invoke メソッドを通じて Action 実装が呼び出されると、Interceptor が実行されます。
インターセプターは多くの機能をアクションから分離し、アクションのコードを大幅に削減し、独立した動作により再利用性が向上します。 XWork および WebWork の多くの機能は Interceptor によって実装されます。Action で使用される Interceptor は、指定した順序で Action の実行の前後に実行されます。
以上がAspect を使用してメソッドの入口と出口のログを実装するエクスペリエンス共有の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。