1

Strtus2 Action クラスには、getData()、getDetails() などの名前のメソッドがあります。これらに加えて、アクション クラスにいくつかのゲッター/セッターがあります。ロギングの目的で Spring の AOP 機能を使用したいと考えています。サービス クラスを呼び出している getData() および getDetails() メソッドのログを維持する必要がありますが、アクション クラスに存在するゲッター/セッターのログを維持したくありません。
アスペクトにメソッド名をハードコーディングしたくありません。これを実装する方法の手がかりがありません。私を助けてください。

私のAOP Loggerクラスは次のようなものです:

@Before("myPointCut() && allService()")
public void logEntryService(JoinPoint joinPoint) {
    System.out.println("Start of " + joinPoint.getSignature().getName() + "() of "+joinPoint.getThis());
    start = System.currentTimeMillis();
}


@After("myPointCut() && allService()")
public void logExitService(JoinPoint joinPoint) {
    System.out.println("End of " + joinPoint.getSignature().getName() + "() of "+joinPoint.getThis());
    start = System.currentTimeMillis();
}

@Pointcut("@annotation(com.ing.trialbal.log.LogThis)")
public void myPointCut() {
    System.out.println("*************My PointCut");
}

@Pointcut("execution(* com.ing.trialbal.*.*.*(..))")
public void allService() {
    System.out.println("************All service");
}

LogThis.java

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

}

しかし、サービス内のすべてのメソッドとログを取得するための dao に常に @Logthis を記述する必要があるため、これによりアプリケーションで非常に緊密な結合が作成されました。

4

1 に答える 1

1

でバインドされたポイントカット@annotation()。何かのようなもの

注釈クラス

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {}

AOP ロガー

@Pointcut("@annotation(com.Loggable)") //  && execution( ... )

アクションクラス

@Loggable
Object getData() {}

@Loggable
Object getDetails() {}
于 2013-07-03T07:00:30.207 に答える