1Î§ÈÆÍ¨Öª
Î§ÈÆÍ¨ÖªÊÇAOPÖÐ×îǿʢµÄ֪ͨÀàÐÍ£¬Ëü¿ÉÒÔÔÚÄ¿µÄÒªÁìÖ´ÐÐǰºó¾ÙÐÐ×Ô½ç˵²Ù×÷£¬ÉõÖÁ¿ÉÒÔÍêÈ«Ìæ»»Ä¿µÄÒªÁìµÄÖ´ÐС£ÀýÈ磺
@AspectpublicclassPerformanceLoggingAspect{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(PerformanceLoggingAspect.class);@Around("execution(*com.example.service.UserService.*(..))")publicObjectlogAroundMethod(ProceedingJoinPointjoinPoint)throwsThrowable{logger.info("Methodexecutionstarted...");longstartTime=System.currentTimeMillis();Objectresult=joinPoint.proceed();//CalltheactualmethodlongexecutionTime=System.currentTimeMillis()-startTime;logger.info("Methodexecutioncompleted.Result:"+result+".Executiontime:"+executionTime+"ms");returnresult;}}ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇʹÓÃÁË`@Around`×¢½â½ç˵ÁËÒ»¸öÎ§ÈÆÍ¨Öª£¬ËüÔÚÄ¿µÄÒªÁìÖ´ÐÐǰºó¾ÙÐÐÁËÈÕÖ¾¼Í¼ºÍÖ´ÐÐʱ¼äÅÌËã¡£
×î¼Ñʵ¼ù
×èֹ̫¹ýʹÓãºAOPËäÈ»¹¦Ð§Ç¿Ê¢£¬µ«Ì«¹ýʹÓÿÉÄܻᵼÖ´úÂëÄÑÒÔÃ÷È·ºÍά»¤¡£Òò´Ë£¬ÔÚʹÓÃAOPʱӦ±£?³Ö¾«Á·ºÍÃ÷È·£¬×èÖ¹½«ËùÓкáÇйØ×¢µã¶¼×ªÒƵ½ÇÐÃæÖС£
×¢ÖØ²âÊÔ£ºÇÐÃæµÄÂß¼ËäÈ»Ïà¶Ô×ÔÁ¦£¬µ«ËüÃÇÓëÓªÒµÂ߼ϸÃÜÏàÁ¬¡£Òò´Ë£¬Ó¦¸Ã¶ÔÇÐÃæ¾ÙÐгä·ÖµÄ²âÊÔ£¬È·±£ËüÃÇÔÚÏÖʵʹÓÃÖв»»áÒýÈëеÄÎÊÌâ¡£
ÎĵµºÍ×¢ÊÍ£ºÎªÃ¿¸öÇÐÃæ±àдÏêϸµÄÎĵµºÍ×¢ÊÍ£¬×ÊÖúÍŶӳÉÔ±Ã÷È·ÇÐÃæµÄ×÷ÓúÍʵÏÖ·½·¨£¬Ìá¸ß´úÂëµÄ¿Éά»¤ÐÔ¡£
ͨ¹ýÒÔÉÏÏêϸµÄ?¹¦Ð§ÏÈÈݺÍÊÊÓÃÖ¸ÄÏ£¬Ï£ÍûÄÜ×ÊÖúÄã¸üºÃµØÃ÷È·ºÍÓ¦ÓúÃÉ«ÏÈÉúµÄAOP¹¦Ð§¡£ÎÞÂÛÄãÊÇÐÂÊÖÕÕ¾É×ÊÉ·¢Õߣ¬ÕÆÎÕÕâЩ¼¼Çɶ¼½«ÎªÄãµÄÏîÄ¿¿ª·¢´øÀ´ÏÔÖøµÄÌáÉý¡£ÏÂÃæÎÒÃǽ«ÉîÈë̽ÌÖһЩÏÖʵµÄÓ¦Óó¡¾°£¬²¢?ÌṩһЩÊÊÓõļ¼ÇÉ£¬ÒÔ±ãÄãÄÜÔÚÕæÊµ¿ª·¢ÇéÐÎÖгä·ÖÑéÕ¹ºÃÉ«ÏÈÉúAOPµÄDZÁ¦¡£
3ÎÞаµÄÇÐÈëµã±í´ïʽ
ÇÐÈëµã£¨Pointcut£©ÊÇAOPµÄÒªº¦¿´·¨£¬ÓÃÓÚÖ¸¶¨ÄÄЩҪÁì»òÀàÐèÒª±»ÔöÇ¿¡£ºÃÉ«ÏÈÉúÌṩÁËһϵÁÐǿʢµÄÇÐÈëµã±í´ïʽ£¬¿ÉÒÔÆ¾Ö¤ÒªÁìÊðÃû¡¢ÀàÃû¡¢°üÃûµÈ²î±ðÌõ¼þÀ´½ç˵ÇÐÈëµã¡£
@Before("execution(*com.example.service.*.*(..))&&args(id)")publicvoidbeforeMethodWithId(Longid){System.out.println("Methodwithid:"+id+"started...");}
ÓÅ»¯ÇÐÃæÐÔÄÜ
ÇÐÃæµÄÖ´ÐпÉÄÜ»áÓ°ÏìϵͳµÄ?ÐÔÄÜ£¬Òò´ËÔÚÉè¼ÆºÍʹÓÃÇÐÃæÊ±Ó¦×¢ÖØÒÔϼ¸µã£º
×èÖ¹ÔÚÎ§ÈÆÍ¨ÖªÖоÙÐÐÖØ´óÅÌËã£ºÎ§ÈÆÍ¨ÖªÔÚÄ¿µÄÒªÁìÖ´ÐÐǰºó»á¾ÙÐÐÁ½´ÎŲÓã¬Òò´ËÔÚÎ§ÈÆÍ¨ÖªÖÐ×èÖ¹¾ÙÐÐÖØ´óÅÌËã»òI/O²Ù×÷£¬ÒÔÃâÓ°ÏìÐÔÄÜ¡£
ºÏÀíÑ¡ÔñÅþÁ¬µãÆ¥Å乿Ôò£º¹ýÓÚ¿íËɵÄÅþÁ¬µãÆ¥Å乿Ôò¿ÉÄܻᵼÖ²»ÐëÒªµÄÇÐÃæÖ´ÐУ¬´Ó¶øÓ°ÏìÐÔÄÜ¡£Òò´Ë£¬Ó¦Ö»¹Ü׼ȷµØ½ç˵ÅþÁ¬µãÆ¥Å乿Ôò¡£
ʹÓøßЧµÄÖ¯Èë·½·¨£ºÆ¾Ö¤ÏîÄ¿ÐèÇóÑ¡ÔñºÏÊʵÄÖ¯Èë·½·¨£¨Èç±àÒëʱ֯Èë¡¢ÔËÐÐʱ֯ÈëºÍLoad-timeWeavable£©£¬ÒÔʵÏÖ×î¼ÑµÄÐÔÄܺͼæÈÝÐÔ¡£
@Around("execution(*com.example.service.UserService.*(..))")publicObjectlogAroundMethod(ProceedingJoinPointjoinPoint)throwsThrowable{logger.info("Methodexecutionstarted...");Objectresult=joinPoint.proceed();logger.info("Methodexecutioncompleted.");returnresult;}
У¶Ô£ºËÎÏþ¾ü(f3J1ePQDlzHhwh44q38w4Ima2E3XrDq)



