@Aspect AOP
3596 ワード
@Asspectエージェントの適用
エージェントをスプリングアプリケーションに適用する場合は、ポイントカットとデバイスからなるコンサルタントを作成し、スプリング空席として登録するだけです.
残りは自動エージェントジェネレータによって自動的に処理されます.
自動エージェントジェネレータは、スプリング空席として登録されているコンサルタントを検索し、スプリング空席にエージェントを自動的に適用します.
(もちろん、ポイントカットに一致する場合は、プロキシを作成します.)
スプリングは@AsspectAnotationで、ポイントカットとアクセサリからなるコンサルタントジェネレータを非常に便利にサポートします.
cf)コメント
@AspectはAspectJプロジェクトが提供するプレゼンテーションであり,観点向けのプログラミングを可能にする.
スプリングはこれを利用してエージェントを通過するAOPを可能にする.
サンプルコード
@Slf4j
@Aspect
public class LogTraceAspect {
private final LogTrace logTrace;
public LogTraceAspect(LogTrace logTrace) {
this.logTrace = logTrace;
}
@Around("execution(* hello.proxy.app..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
TraceStatus status = null;
try {
final String message = joinPoint.getSignature().toShortString();
status = logTrace.begin(message);
//로직 호출
final Object result = joinPoint.proceed();
logTrace.end(status);
return result;
} catch (Exception e) {
logTrace.exception(status, e);
throw e;
}
}
}
@Configuration
public class AopConfig {
@Bean
public LogTraceAspect logTraceAspect(LogTrace logTrace) {
return new LogTraceAspect(logTrace);
}
}
@Asspectエージェント
自動エージェントジェネレータは、Advisorを自動的に見つけ、必要な場所でエージェントを作成して適用します.
自動エージェントジェネレータでは、@Asspectを見つけてAdvisorとして作成する役割も追加できます.
簡単に言えば@AsspectをAdvisorに変換して保存することもできます.
自動エージェントジェネレータは2つのことをします。
1.@Asspectをアドバイザに変換して保存
実行
@Asspected Builder
BeanFactoryAssepctJAdvisorBuilderクラス.
@Asspectの情報に基づいて、Pointcut、Advisor、Advisorを作成および保存します.
@Asspectの情報に基づいてAdvisorを作成します.
@Asspectedbyzer builder内部リポジトリにキャッシュします.
キャッシュにAdvisorが作成されている場合は、キャッシュに格納されているAdvisorを返します.
2.Advisorベースのエージェントの作成
1作成:スプリング空のオブジェクトとして作成されます.(beanとすべての素子スキャンを含む)
2.転送:生成されたオブジェクトを空のリポジトリに登録する前に、空のポストプロセッサに転送します.(自動エージェントジェネレータ)
3-1. Advisorクエリー:SpringコンテナですべてのAdvisor空をクエリーします.
3-2. @≪ビューの表示|View|emdw≫:≪コンサルタントの表示|View Advisor|emdw≫:@ビュー・ビルダーの内部に保管されているすべてのコンサルタントを表示します.
4.エージェント適用オブジェクトを確認する:前の3-1,3-2でクエリーしたアドバイザに含まれるポイントカットを使用して、そのオブジェクトがエージェントに適用されるかどうかを判断します.
この場合、オブジェクトのクラス情報とそのオブジェクトのすべてのメソッドがポイントカットに一致します.
したがって,1つの条件を満たす限りエージェントの適用対象となる.
5.プロキシの作成:プロキシが適用される場合は、プロキシを作成してプロキシに戻ります.このエージェントをspringbinとして登録します.
エージェントに適用されない場合は、元のオブジェクトを返し、スプリング空席として登録します.
整理する
@Aspectを使用して匿名ベースのエージェントを作成できます.
Reference
この問題について(@Aspect AOP), 我々は、より多くの情報をここで見つけました https://velog.io/@hyun6ik/Aspect-AOPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol