[6] AOP
AOPが必要
質問する
会員登録、会員照会で時間を測定する機能は核心的な注目事項ではない.
時間を測定する論理は共通の関心の問題である.
時間測定ロジックとコアビジネスロジックが混在しており、メンテナンスが困難です.
測定時間の論理を単独の汎用論理に変えることは難しい.
測定時間の論理を変更する場合は、すべての論理を検索して変更します.
AOPの適用
AOP: Aspect Oriented Programming
共通の注目点とコアの注目点を区別する
登録タイミングAOP
package hello.hellospring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs +
"ms");
}
}
}
解決する会員加入、会員照会などの中核的な関心事項と測定時間の共通の関心事項を分ける.
測定時間の論理を独立した汎用論理に変えた.
コアの注目点を清潔に保つ.
変更が必要な場合は、このロジックを変更するだけです.
必要な適用オブジェクトを選択できます.
スプリングのAOP挙動を記述する
AOPを適用する前の依存関係
AOP適用後の依存関係
コントローラがサービスを注入すると、エージェントという偽のサービスが呼び出され、Pointに参加する.プロセス()が完了したら、実際のサービスを呼び出します.
AOP適用前の全図
AOP適用後の全図
Reference
この問題について([6] AOP), 我々は、より多くの情報をここで見つけました https://velog.io/@jinii/6-AOPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol