[AOP]JoinPointとバインド変数
Spring JoinPointが提供する方法
Signature getSignature()クライアント呼び出しメソッドのフラグ(戻りタイプ、名前、パラメータ)情報を含む署名オブジェクト を返す.
Object getTarget()は、クライアント呼び出しのビジネスメソッドを含むビジネスオブジェクト(クラスオブジェクトを返す) を返す.
Object[] getArgs()クライアントがメソッドを呼び出すときに渡すパラメータのリストをオブジェクト配列 に返す.
Aroundデバイスメソッドを実装する際に使用するProcedinJoinPointインタフェースはJoinPointを継承するクラスである.
これにより、JoinPointが所有するすべてのメソッドがサポートされ、「継続」()メソッドが追加されます.
なお、JoinPointのパラメータとしてBefor、After Returning、After Throwing、After Advisorを使用し、Around AdvisorでのみProcedinPointを使用します.Around Advisorで()メソッドを続けるだけなので.
署名オブジェクトの提供方法
String getName()クライアントが呼び出すメソッド名は を返す.
String toLongString()
パケットパスを含むクライアントが呼び出すメソッドのタイプ、名前、およびパラメータを返します.
String toShortString() クライアント呼び出しメソッドに戻る略語文字列 1.前置詞
2番目のパラメータは、バインド変数であるObjectタイプのReturnObjectを宣言します.
バインド変数は、ビジネス・メソッドが返す結果値をバインドするために使用されます.返される値が何であるか分からないため、タイプはObjectとして宣言されます.
@AfterReturningのreturn値は、2番目のパラメータ名と一致します.
3.After Throwing Advisor第2パラメータ取得Exception情報 @AfterThrowing内の投げ値は2番目のパラメータ名と一致しています. ハブ
Signature getSignature()
Object getTarget()
Object[] getArgs()
Aroundデバイスメソッドを実装する際に使用するProcedinJoinPointインタフェースはJoinPointを継承するクラスである.
これにより、JoinPointが所有するすべてのメソッドがサポートされ、「継続」()メソッドが追加されます.
なお、JoinPointのパラメータとしてBefor、After Returning、After Throwing、After Advisorを使用し、Around AdvisorでのみProcedinPointを使用します.Around Advisorで()メソッドを続けるだけなので.
署名オブジェクトの提供方法
String getName()
String toLongString()
パケットパスを含む
String toShortString()
@Before("cut() && enableDecode()")
public void before(JoinPoint joinPoint) throws UnsupportedEncodingException{
Object[] args = joinPoint.getArgs();
String methodName = joinPoint.getSignature().getName();
for(Object arg : args){
if(arg instanceof User){
User user = User.class.cast(arg);
String base64Email = user.getEmail();
String email = new String(Base64.getDecoder().decode(base64Email), "UTF-8");
user.setEmail(email);
}
}
System.out.println("실행된 메소드명: " + methodName);
}
2.アフターサービス設備@AfterReturning(value = "pointcut() && enableDecode()", returning = "returnObj")
public void afterReturn(JoinPoint joinPoint, Object returnObj){
if(returnObj instanceof User){
User user = User.class.cast(returnObj);
String email = user.getEmail();
String base64Email = Base64.getEncoder().encodeToString(email.getBytes());
user.setEmail(base64Email);
}
}
2番目のパラメータは、バインド変数であるObjectタイプのReturnObjectを宣言します.
バインド変数は、ビジネス・メソッドが返す結果値をバインドするために使用されます.返される値が何であるか分からないため、タイプはObjectとして宣言されます.
@AfterReturningのreturn値は、2番目のパラメータ名と一致します.
@AfterThrowing(value = "pointcut() && enableDecode()", throwing = "exceptObj")
public void afterThrowing(JoinPoint joinPoint, Exception exceptObj){
String method = joinPoint.getSignature().getName();
String errMsg = exceptObj.getMessage();
System.out.println("메소드명: " + method);
System.out.println("ErrMsg: " + errMsg);
}
@Around("pointcut() && enableDecode()")
public Object around(ProceedingJoinPoint joinPoint){
String method = joinPoint.getSignature().getName();
StopWatch stopWatch = new StopWatch();
stopWatch.start();
System.out.println("around 시작");
Object obj = joinPoint.proceed();
stopWatch.stop();
System.out.println("around 메소드명: " + method + "수행에 걸린 시간: " + stopWatch.getTotalTimeMillis() + "(ms)초");
return obj;
}
Reference
この問題について([AOP]JoinPointとバインド変数), 我々は、より多くの情報をここで見つけました https://velog.io/@bey1548/AOP-JoinPoint-와-바인드-변수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol