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

ȪԴ£ºÖ¤È¯Ê±±¨Íø×÷Õߣº
×ÖºÅ

×î¼Ñʵ¼ù

×èֹ̫¹ýʹÓãºAOPËäÈ»¹¦Ð§Ç¿Ê¢? £¬µ«?Ì«¹ýʹÓÿÉÄܻᵼÖ´úÂëÄÑÒÔÃ÷È·ºÍά»¤ ¡£Òò´Ë £¬ÔÚʹÓÃAOPʱӦ¼á³Ö¾«Á·ºÍÃ÷È· £¬×èÖ¹½«ËùÓкáÇйØ×¢µã¶¼×ªÒƵ½ÇÐÃæÖÐ ¡£

×¢ÖØ²âÊÔ£ºÇÐÃæµÄÂß¼­ËäÈ»Ïà¶Ô×ÔÁ¦ £¬µ«ËüÃÇÓëÓªÒµÂß¼­Ï¸ÃÜÏàÁ¬ ¡£Òò´Ë? £¬Ó¦¸Ã¶ÔÇÐÃæ¾ÙÐгä·ÖµÄ²âÊÔ £¬È·±£ËüÃÇÔÚÏÖʵʹÓÃÖв»»áÒýÈëеÄÎÊÌâ ¡£

ÎĵµºÍ×¢ÊÍ£ºÎªÃ¿¸öÇÐÃæ±àдÏêϸµÄÎĵµºÍ×¢ÊÍ £¬×ÊÖúÍŶӳÉÔ±Ã÷È·ÇÐÃæµÄ×÷ÓúÍʵÏÖ·½·¨ £¬Ìá¸ß´úÂëµÄ¿Éά»¤ÐÔ ¡£

ͨ¹ýÒÔÉÏÏêϸµÄ¹¦Ð§ÏÈÈݺÍÊÊÓÃÖ¸ÄÏ £¬Ï£ÍûÄÜ×ÊÖúÄã¸üºÃµØÃ÷È·ºÍÓ¦ÓúÃÉ«ÏÈÉúµÄAOP¹¦Ð§ ¡£ÎÞÂÛÄãÊÇÐÂÊÖÕÕ¾É×ÊÉ·¢Õß £¬ÕÆÎÕÕâЩ¼¼Çɶ¼½«ÎªÄãµÄÏîÄ¿¿ª·¢´øÀ´ÏÔÖøµÄÌáÉý ¡£ÏÂÃæÎÒÃǽ«ÉîÈë̽ÌÖһЩÏÖʵµÄÓ¦Óó¡¾° £¬²¢ÌṩһЩÊÊÓõļ¼ÇÉ £¬ÒÔ±ãÄãÄÜÔÚÕæÊµ¿ª·¢ÇéÐÎÖгä·ÖÑéÕ¹ºÃÉ«ÏÈÉúAOPµÄDZÁ¦ ¡£

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

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

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

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

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

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

ÀýÈç £¬ÈôÊÇÄãÓÐÒ»¸öʵÏÖÁËij¸ö½Ó¿ÚµÄ·þÎñÀà £¬Äã¿ÉÒÔʹÓÃJDK¶¯Ì¬´úÀíÀ´ÔöÇ¿Õâ¸öÀࣺ

java@Aspect@ComponentpublicclassLoggingAspect{

}

####7.2CGLIB´úÀíCGLIB´úÀíÊÊÓÃÓڷǽӿÚÀà ¡£ÈôÊÇÄãÐèÒª¶ÔÒ»¸ö·Ç½Ó¿ÚÀà¾ÙÐÐÔöÇ¿ £¬¿ÉÒÔʹÓÃCGLIB´úÀí£º

java@Configuration@EnableAspectJAutoProxy(proxyTargetClass=true)publicclassAppConfig{}

ͨ¹ýÉèÖÃ`proxyTargetClass=true` £¬ÎÒÃÇ¿ÉÒÔʹÓÃCGLIB´úÀíÀ´ÔöÇ¿·Ç½Ó¿ÚÀà ¡£###8.ÏÖʵӦÓó¡¾°####8.1ÈÕÖ¾¼Í¼ÈÕÖ¾¼Í¼ÊÇAOP×î³£¼ûµÄ?Ó¦Óó¡¾°Ö®Ò» ¡£Í¨¹ý½ç˵һ¸öÇÐÃæ £¬¿ÉÒÔÔÚ²»ÐÞ¸ÄÏÖÓдúÂëµÄÇéÐÎÏ £¬ÔÚÒªÁìŲÓÃǰºó¼Í¼ÈÕÖ¾ ¡£

java@Aspect@ComponentpublicclassLoggingAspect{

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`×¢½â½ç˵ÁËÒ»¸öÎ§ÈÆÍ¨Öª £¬ËüÔÚÄ¿µÄÒªÁìÖ´ÐÐǰºó¾ÙÐÐÁËÈÕÖ¾¼Í¼ºÍÖ´ÐÐʱ¼äÅÌËã ¡£

ǿʢµÄ?֪ͨ»úÖÆ

ºÃÉ«ÏÈÉúÌṩÁ˸»ºñµÄ֪ͨÀàÐÍ £¬°üÀ¨Ç°ÖÃ֪ͨ£¨Before£©¡¢ºóÖÃ֪ͨ£¨After£©¡¢Ò쳣֪ͨ£¨AfterThrowing£©¡¢ÍË»¯Í¨Öª£¨AfterReturning£©ÒÔ¼°Î§ÈÆÍ¨Öª£¨Around£© ¡£¿ª·¢Õß¿ÉÒÔÆ¾Ö¤ÐèҪѡÔñºÏÊʵÄ֪ͨÀàÐÍ £¬ÊµÏÖ¶Ô´úÂëµÄÖÜÈ«¿ØÖÆ ¡£

ʹÓÃÎ§ÈÆÍ¨Öª

@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");}}}

¸ß¼¶ÓÅ»¯¼¼ÇÉ

ÇÐÃæ×éºÏ£º¶à¸öÇÐÃæ¿ÉÒÔ×éºÏÔÚÒ»Æð £¬ÐγÉÖØ´óµÄÇÐÃæÁ´ £¬ÒÔʵÏÖ¸üÖØ´óµÄ¹¦Ð§ ¡£ÀýÈç £¬¿ÉÒÔ½«ÈÕÖ¾ÇÐÃæºÍÇå¾²ÇÐÃæÍŽáʹÓà £¬È·±£?ÔÚÓªÒµÂß¼­ÖÐ×Ô¶¯¼Í¼ÈÕÖ¾²¢¾ÙÐÐÇå¾²¿ØÖÆ ¡£

Ö¯Èë·½·¨£ººÃÉ«ÏÈÉúÖ§³Ö¶àÖÖÖ¯Èë·½·¨£¨Èç±àÒëʱ֯Èë¡¢ÔËÐÐʱ֯ÈëºÍLoad-timeWeavable£© £¬Æ¾Ö¤²î±ðµÄÐèÇóÑ¡ÔñºÏÊʵÄÖ¯Èë·½·¨ £¬ÒÔʵÏÖ×î¼ÑµÄÐÔÄܺͼæÈÝÐÔ ¡£

ÐÔÄÜ¼à¿Ø£ºÊ¹ÓúÃÉ«ÏÈÉúµÄµ÷ÊÔºÍ¼à¿Ø¹¦Ð§ £¬¿ÉÒÔ¶ÔÇÐÃæµÄÖ´ÐÐÇéÐξÙÐÐʵʱ¼à¿Ø £¬ÕÒ³öÐÔÄÜÆ¿¾±²¢¾ÙÐÐÓÅ»¯ ¡£

У¶Ô£ºÖì¹ãȨ(f3J1ePQDlzHhwh44q38w4Ima2E3XrDq)

ÔðÈα༭£º ¶­Ù»
ÉùÃ÷£ºÖ¤È¯Ê±±¨Á¦ÕùÐÅÏ¢ÕæÊµ¡¢×¼È· £¬ÎÄÕÂÌá¼°ÄÚÈݽö¹©²Î¿¼ £¬²»×é³ÉʵÖÊÐÔͶ×ʽ¨Òé £¬¾Ý´Ë²Ù×÷Σº¦×Ôµ£
ÏÂÔØ"֤ȯʱ±¨"¹Ù·½APP £¬»ò¹Ø×¢¹Ù·½Î¢ÐŹ«ÖںŠ£¬¼´¿ÉËæÊ±Ïàʶ¹ÉÊж¯Ì¬ £¬¶´²ìÕþ²ßÐÅÏ¢ £¬ÕÆÎղƲú»ú»á ¡£
ΪÄãÍÆ¼ö
ºÃÉ«ÏÈÉúaop¹¦Ð§Ïê½âÓëÊÊÓÃÖ¸ÄÏ