AOPを使用して、一部のサービスについて監査フレームワークをラップしています。私は再帰のために同じアクションのために複数のイベントを監査するという問題に遭遇しました。メソッドを@NonAuditable
とマークし、それを私のpointcut戦略に追加するための簡単な解決策です。私はまだ方法が実行されることを発見している。注釈が存在しない場合はAOPと実行
は、ここに私の既存の戦略です:
@Around(value="(" +
"execution(* my.class.services..*.*(..)) " +
") && "+
"@annotation(auditable)), argName="audit")
public Object audit(ProceedingJoinPoint call, Audit audit) {
...
...
}
は、どのように私はそれが@NonAuditable
注釈が含まれていない場合にのみサービスパッケージ内で実行」と言って、私の実行を更新することができ
を私は次のことを試してみました、?動作しませんでした:
@Around(value="(" +
"execution(* my.class.services..*.*(..)) " +
") && "+
"[email protected](NonAuditable) && " +
"@annotation(auditable), argName="audit")
public Object audit(ProceedingJoinPoint call, Audit audit) {
...
...
}
UPDATE:
は、ここで私は継承
package my.class.services.CarService
import ...
...
@Auditable(message="Request for traffic violations", Context="Search")
public List<Ticket> getTickets(long id){
List<Ticket> tix = dmvRepository.getUserTicketsById(id);
... // do work
}
一つの問題\
package my.class.services.UserService
import ...
...
@Auditable(message="Request for user", Context="Search")
public User getUser(long id){
User u = userRepository.getUser(id);
... // do work
}
を監査しますいくつかの方法のいくつかの例ですgetTickets
は、他の方法で再帰的に呼び出されていると私は適用することができるように探していますということですAnnotation
(@NonAuditable
)を使用して、getTickets
の監査を停止します。
私はこの問題を十分に理解していないと思いますが、説明は不明です。どの種類のメソッドを監査するのか、どのメソッドを監査しないのかを示すサンプルコードを追加してください。可能であれば、メソッド、注釈、階層を呼びたいと思っています。 – kriegaex
が更新されました。さらに詳しい情報が必要な場合はお知らせください – Dan
私はまだ理解していません。同じメソッドで '@ Auditable'と' @ NonAuditable'の両方を使いたいのですか?面白いアイデアだが、なぜ?実際に問題を説明するのではなく、おそらくはうまくいかない解決策を意味しています。私はまだあなたが単語で説明する再帰問題をコードには見ません。 – kriegaex