spring boot aop記録方法実行時コード例


本論文で研究したのは主にspring boot aop記録方法の実行時間の実現コードであり、具体的には以下の通りである。
性能を向上させるためには、まず各方法の実行時間を統計して、直接に方法の前後のlog出力が面倒くさいので、AOPで時間統計に参加できます。
依存を追加

<dependency>  
 <groupId>org.springframework.boot</groupId>  
 <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
appication.propertiesにプロファイルを追加します。

spring.aop.auto=true
spring.aop.aut属性はデフォルトでオープンしています。つまりAOP依存を導入すると、デフォルトでは@EnbaleAspect JAtoxyが追加されました。くれぐれも余計な情報を入れないようにしてください。
具体的なコードを実現する

@Component
@Aspect
public class LogAspect {
	private static final Log LOG = LogFactory.getLog(LogAspect.class);
	/**
   *        .
   *    :
   *
   * ~     *              .
   * ~     *    web     
   * ~     *     
   * ~ ..          .
   */
	@Pointcut("execution(* com.wedo.stream.service..*.*(..))")
	   public void logPointcut(){
	}
	@org.aspectj.lang.annotation.Around("logPointcut()")
	   public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{
		//  	 LOG.debug("logPointcut " + joinPoint + "\t");
		long start = System.currentTimeMillis();
		try {
			Object result = joinPoint.proceed();
			long end = System.currentTimeMillis();
			LOG.error("+++++around " + joinPoint + "\tUse time :
 " + (end - start) + " ms!");
			return result;
		}
		catch (Throwable e) {
			long end = System.currentTimeMillis();
			LOG.error("+++++around " + joinPoint + "\tUse time : 
" + (end - start) + " ms with exception : " + e.getMessage());
			throw e;
		}
	}
}
問題に注意する
aop後の方法は正しく値に戻りません。
このプロキシ方法は必ず値を返します。さもなければ、コードには戻り値がありません。

//      
 public void doAround(ProceedingJoinPoint joinPoint){}
Spring AOP部分はJDKダイナミックエージェントまたはCGLOIBを使用してターゲットオブジェクトのためのプロキシを作成します。少なくとも一つのインターフェースがプロキシの目的で実現されると、JDK動的エージェントが使用される。このターゲットタイプが実装されるすべてのインターフェースは、エージェントによってプロキシされる。ターゲットオブジェクトがインターフェースを実装していない場合、CGLOIBエージェントが作成される。
デフォルトはJDKダイナミックエージェントです。cglibに変更します。
締め括りをつける
以上が、本論文のspring boot aop記録方法のタイムコードの例を実行する全ての内容であり、皆さんの助けを期待しています。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。