ºÃÉ«ÏÈÉúaop¹¦Ð§Ïê½âÓëʵÓÃÖ¸ÄÏ

À´Ô´£ºÖ¤È¯Ê±±¨Íø×÷Õߣº
×ÖºÅ

½ç˵һ¸öÇÐÃæÀ´´¦ÀíÈÕÖ¾¼Í¼ºÍÖ´ÐÐʱ¼äÅÌË㣺

@Aspect@ComponentpublicclassPerformanceLoggingAspect{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(PerformanceLoggingAspect.class);@Before("execution(*com.example.service.UserService.*(..))")publicvoidlogBeforeMethod(){logger.info("Methodexecutionstarted...");}@AfterReturning(pointcut="execution(*com.example.service.UserService.*(..))",returning="result")publicvoidlogAfterMethod(Objectresult){longexecutionTime=System.currentTimeMillis()-startTime;logger.info("Methodexecutioncompleted.Result:"+result+".Executiontime:"+executionTime+"ms");}}

³ä·ÖÀûÓõ÷ÊÔºÍ¼à¿Ø¹¦Ð§

ʹÓõ÷ÊÔÆ÷£ºÍ¨¹ýµ÷ÊÔÆ÷£¬¿ÉÒÔÖð²½Ö´ÐÐÇÐÃæµÄ´úÂ룬¼ì²ìÿһ²½µÄÖ´ÐÐÇé¿ö£¬×ÊÖúÀí½âºÍµ÷ÊÔÇÐÃæµÄÂß¼­¡£

¼à¿ØÇÐÃæÖ´ÐУºÀûÓúÃÉ«ÏÈÉúµÄ?¼à¿Ø¹¦Ð§£¬¿ÉÒÔʵʱ¼ì²ìÇÐÃæµÄÖ´ÐÐÇé¿ö£¬°üÀ¨Ö´ÐÐʱ¼ä¡¢ÒªÁìŲÓôÎÊýµÈ£¬×ÊÖúÓÅ»¯ÇÐÃæµÄÐÔÄÜ¡£

ÈÕÖ¾ºÍ¾¯¸æ£ºÍ¨¹ýÈÕÖ¾ºÍ¾¯¸æ¹¦Ð§£¬¿ÉÒԼͼÇÐÃæµÄ?Ö´ÐÐÇé¿öºÍ¿ÉÄÜ·ºÆðµÄÎÊÌ⣬×ÊÖú½øÐÐÎÊÌâµÄ×·×ÙÏ¢Õù¾ö¡£

ͨ¹ýÒÔÉÏʵ¼ÊÓ¦Óó¡¾°ºÍʵÓü¼ÇÉ£¬ÏàÐÅÄãÄܸüºÃµØÕÆÎÕºÃÉ«ÏÈÉúµÄAOP¹¦Ð§£¬²¢ÔÚʵ¼Ê¿ª·¢Öгä·Ö·¢»ÓÆäDZÁ¦¡£ÎÞÂÛÊÇÈÕÖ¾¼Í¼¡¢ÊÂÎñÖÎÀíÕÕ¾ÉÄþ¾²¿ØÖÆ£¬Í¨¹ýAOPµÄ·½·¨£¬¶¼¿ÉÒÔ´ó´ó¼ò»¯´úÂ룬Ìá¸ß´úÂëµÄ¿Éά»¤ÐԺͿɶÁÐÔ¡£Ï£ÍûÕâÆªÎÄÕÂÄÜΪÄãÌṩÓмÛÖµµÄÖ¸µ¼ºÍ°ï?Öú£¬×£ÄãÔÚʹÓúÃÉ«ÏÈÉúµÄÀú³ÌÖÐÈ¡µÃÀֳɣ¡

ÔÚÏÖ´úÈí¼þ¿ª·¢ÖУ¬ÃæÏò·½ÃæµÄ±à³Ì£¨AspectOrientedProgramming,AOP£©ÒѾ­³ÉΪһÖÖÖØÒªµÄ±à³Ì·¶Ê½¡£Í¨¹ýAOP£¬¿ª·¢Õß¿ÉÒÔÔ½·¢ÇåÎúµØ½«ºáÇйØ×¢µã£¨ÈçÈÕÖ¾¡¢Äþ¾²¡¢ÊÂÎñÖÎÀíµÈ£©Óë½¹µãÒµÎñÂß¼­ÊèÉ¢£¬´Ó¶øÌá¸ß´úÂëµÄ?¿Éά»¤ÐԺ͸´ÓÃÐÔ¡£

ºÃÉ«ÏÈÉú£¨HeShuXiang£©×÷Ϊһ¿î¹¦Ð§Ç¿´óµÄAOP¿ò¼Ü£¬ÕýÔÚ³ÉΪÐí¶à¿ª·¢ÕßµÄÊ×Ñ¡¹¤¾ß¡£±¾ÎĽ«Ïêϸ½éÉܺÃÉ«ÏÈÉúAOPµÄ¹¦Ð§£¬²¢ÌṩʵÓÃÖ¸ÄÏ£¬×ÊÖúÄãÔÚʵ¼ÊÏîÄ¿Öгä·ÖÀûÓÃÕâÒ»¹¤¾ß¡£

ÓÅ»¯ÇÐÃæÐÔÄÜ

ÇÐÃæµÄÖ´ÐпÉÄÜ»áÓ°ÏìϵͳµÄÐÔÄÜ£¬Òò´ËÔÚÉè¼ÆºÍʹÓÃÇÐÃæÊ±Ó¦×¢ÒâÒÔϼ¸µã£º

ÖÆÖ¹ÔÚÎ§ÈÆÍ¨ÖªÖнøÐÐÅÓ´óÅÌËã£ºÎ§ÈÆÍ¨ÖªÔÚÄ¿±êÒªÁìÖ´ÐÐǰºó»á½øÐÐÁ½´ÎŲÓã¬Òò´ËÔÚÎ§ÈÆÍ¨ÖªÖÐÖÆÖ¹½øÐÐÅÓ´óÅÌËã»òI/O²Ù×÷£¬ÒÔÃâÓ°ÏìÐÔÄÜ¡£

ºÏÀíÑ¡ÔñÁ¬½ÓµãÆ¥Å乿Ôò£º¹ýÓÚ¿íËɵÄÁ¬½ÓµãÆ¥Å乿Ôò¿ÉÄܻᵼÖ²»ÐëÒªµÄÇÐÃæÖ´ÐУ¬´Ó¶øÓ°ÏìÐÔÄÜ¡£Òò´Ë£¬Ó¦¾¡Á¿¾«È·µØ½ç˵Á¬½ÓµãÆ¥Å乿Ôò¡£

ʹÓøßЧµÄÖ¯Èë·½·¨£ºÆ¾¾ÝÏîÄ¿ÐèÇóÑ¡ÔñºÏÊʵÄÖ¯Èë·½·¨£¨Èç±àÒëʱ֯Èë¡¢ÔËÐÐʱ֯ÈëºÍLoad-timeWeavable£©£¬ÒÔʵÏÖ×î¼ÑµÄÐÔÄܺͼæÈÝÐÔ¡£

ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃǽáºÏÁËÒªÁìÇ©Ãû¡¢²ÎÊýºÍ×Ô½ç˵ע½âÀ´½ç˵ÇÐÈëµã¡£###7.¶¯Ì¬ÊðÀíÓëJDK¶¯Ì¬´ú?ÀíºÃÉ«ÏÈÉúAOPÖ§³ÖÁ½ÖÖ¶¯Ì¬ÊðÀí·½·¨£ºJDK¶¯Ì¬ÊðÀíºÍCGLIBÊðÀí¡£ÔÚ²î±ðµÄ³¡¾°ÖУ¬Ñ¡Ôñ²î±ðµÄÊðÀí·½·¨¿ÉÒÔ´øÀ´¸üºÃµÄÐÔÄܺÍÁé»îÐÔ¡£####7.1JDK¶¯Ì¬ÊðÀíJDK¶¯Ì¬ÊðÀíÊÊÓÃÓÚʵÏÖÁ˽ӿڵÄ?Àà¡£

ÀýÈ磬Èç¹ûÄãÓÐÒ»¸öʵÏÖÁËij¸ö½Ó¿ÚµÄЧÀÍÀ࣬Äã¿ÉÒÔʹÓÃJDK¶¯Ì¬ÊðÀíÀ´ÔöÇ¿Õâ¸öÀࣺ

java@Aspect@ComponentpublicclassLoggingAspect{

ʹÓÃÎ§ÈÆÍ¨Öª

@AspectpublicclassPerformanceAspect{@Around("execution(*com.example.service.*.*(..))")publicObjectmeasurePerformance(ProceedingJoinPointjoinPoint)throwsThrowable{longstart=System.currentTimeMillis();try{returnjoinPoint.proceed();//¼ÌÐøÖ´ÐÐÄ¿±êÒªÁì}finally{longend=System.currentTimeMillis();System.out.println(joinPoint.getSignature()+"executedin"+(end-start)+"ms");}}}

ͨ¹ýŲÓÃ`joinPoint.proceed()`£¬ÎÒÃÇ¿ÉÒÔÕý³£Å²ÓÃÄ¿±êÒªÁ죬²¢ÔÚÒªÁìÖ´Ðкó½øÐкóÐø´¦Àí¡£###6.×Ô½ç˵ÇÐÈëµã±í´ïʽºÃÉ«ÏÈÉúÔÊÐí¿ª·¢Õß×Ô½ç˵ÅÓ´óµÄÇÐÈëµã±í´ïʽ£¬ÒÔÂú×ã²î±ðµÄÐèÇó¡£ÀýÈ磬Äã¿ÉÒÔÆ¾¾Ý¶à¸öÌõ¼þ×éºÏÀ´½ç˵ÇÐÈëµã£º

java@Before("execution(*com.example.service..(..))&&args(id)&&@annotation(com.example.CustomAnnotation)")publicvoidbeforeMethodWithAnnotation(Longid){System.out.println("Methodwithid:"+id+"andcustomannotationstarted¡­");}

4³ä·ÖÀûÓÃAOPµÄÁé»îÐÔ

ºÃÉ«ÏÈÉúAOPÌṩÁ˺ÜÊÇÁé»îµÄÇÐÈëµã±í´ïʽºÍ֪ͨ»úÖÆ£¬³ä·ÖÀûÓÃÕâЩ¹¦Ð§¿ÉÒÔ´ó´óÌáÉý´úÂëµÄ¿Éά»¤ÐԺ͸´ÓÃÐÔ¡£

ͨ¹ýÒÔÉÏÏêϸµÄ½éÉܺÍʵ¼ù°¸Àý£¬ÏàÐÅÄãÒѾ­¶ÔºÃÉ«ÏÈÉúAOPÓÐÁËÉîÈëµÄÁ˽â¡£ÎÞÂÛÄãÊdzõѧÕßÕÕ¾É×ÊÉ·¢Õߣ¬ÕâЩ֪ʶºÍ¼¼Çɶ¼½«ÎªÄãÔÚʵ¼ÊÏîÄ¿ÖÐÌṩǿ´óµÄÖ§³Ö?¡£Ï£ÍûÕâÆªÖ¸ÄÏÄÜ×ÊÖúÄã¸üºÃµØÀûÓúÃÉ«ÏÈÉúAOP£¬Ìá¸ß´úÂëÖÊÁ¿ºÍ¿ª·¢Ð§ÂÊ¡£

У¶Ô£º»ÆÖÇÏÍ(1C0m4pJyqZtPma0S7t9ZFfz4hTykKag)

ÔðÈα༭£º Âí¼Ò»Ô
ΪÄãÍÆ¼ö
Óû§ÆÀÂÛ
µÇ¼ºó¿ÉÒÔ̸»°
ÍøÓÑÆÀÂÛ½ö¹©Æä±í´ï¸öÈË¿´·¨£¬²¢²»±êÃ÷֤ȯʱ±¨Á¢³¡
ÔÝÎÞÆÀÂÛ