4

Spring MVC で書かれた非常に大きなアプリケーションがあります。アプリケーションでユーザーが行ったことをデータベースに追跡する「活動記録」を保持したいと考えています。

最初の段階では、アクティビティ ログが必要です。これは、ユーザーのアクション中に呼び出されるコントローラー メソッドのリストにすぎませんが、後で、この情報をより「人間が読める」ようにしたいと考えています。つまり、「modifyAccount( accountId = 5, accountBalance =500) 「ユーザー X がアカウント 5 の残高を 500 に更新」のようなもの。

問題は、アプリケーションが非常に大きいため、各アクションを変更してこのロギング メカニズムを追加したくないということです。これを行うためのより柔軟で宣言的な方法はありますか?

4

1 に答える 1

9

アスペクト指向プログラミング (AOP) を利用して、ロギングを自動化できます。

http://static.springsource.org/spring/docs/2.0.8/reference/aop.html

上記のページには、Spring で AOP を使用する方法に関する多くの例が示されています。1 つの例は、関心のあるメソッドを見つけるために注釈を使用することです。このような注釈を使用すると、どのメソッドをログに記録する必要があるかを簡単に判断できます。

@Audit アノテーション

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
    ...
}

監査方法

@After("@annotation(auditable)", argNames="joinPoint")
public void audit(JoinPoint joinPoint) {
    logger.info("Called {} with arguments {}", 
        joinPoint.getSignature().getLongString(), joinPoint.getArgs());
}

私はこのコードをテストしませんでしたが、要点はわかります。

于 2013-08-05T06:49:05.290 に答える