1. مقدمة
لن أقدم الربيع AOP. لقد بحثت كثيرًا عبر الإنترنت. أي شخص استخدم الربيع يعرف الربيع IOC و AOP. غالبًا ما نستخدم IOC ، ولكن في نظامنا ، يكون استخدام AOP صفر تقريبًا. باستثناء وظيفة المراقبة الصغيرة التي يتم تطبيقها ، لا يتم استخدام الآخرين بشكل أساسي. أدناه ، سيقوم المحرر بفرز الحل لاستخدام طريقة تسجيل الربيع AOP لتنفيذ الوقت. دعونا نلقي نظرة إذا كنت في حاجة إليها.
2. الحل
1. الطرق التقليدية
الأبسط والطريقة الخشنة هي إضافة الطابع الزمني في بداية ونهاية كل طريقة تحتاج إلى إحصائيات ، ثم حساب الفرق. الرمز كما يلي:
وقت التشغيل الطويل = system.currentTimeMillis () ؛ // رمز الأعمال الطويل endtime = system.currentTimeMillis () ؛ System.out.println ("وقت تشغيل البرنامج:" + (endtime - startTime) + "MS") ؛ // وقت تشغيل برنامج الإخراجتتطلب هذه الطريقة إضافة رمز مستهلك للوقت إلى العديد من الطرق الإحصائية. هذه الرموز لا علاقة لها بالأعمال الأساسية ، ولكن تتكرر بكميات كبيرة وتنتشر في كل مكان ، مما يجعل من الصعب الحفاظ عليها.
2. طرق البرمجة الموجهة نحو الظل
لذلك ، لا ينصح باستخدام رمز الذوق السيئ أعلاه. فكرت في الأمر لفترة طويلة وخططت لاستخدام أفكار الربيع AOP لإكمال هذه الوظيفة. بدون مزيد من اللغط ، فإن الكود والتفسيرات ذات الصلة هي كما يلي:
استيراد org.apache.commons.logging.log ؛ استيراد org.apache.commons.logging.logfactory ؛ استيراد org.aspectj.lang.proceditingjoinpoint ؛ استيراد org.aspectj.lang.annotation.around ؛ استيراد org.aspectj.lang.annotation.Aspect ؛ استيراد org.aspectj.lang.reflect.MethodSignature ؛ استيراد org.springframework.stereotype.component ؛/*** فئة الوجه الربيع المستهلكة للوقت لتنفيذ طريقة الكشف* باستخدام الفصل المشروع بواسطة @ASPECT ، سوف يعاملها Spring كحبة خاصة (قسم) ، فهو لن يكون هناك فئة ديناميكية من الفئة نفسها* @Author Blinkfox* logger = logfactory.getLog (timeInterceptor.Class) ؛ // دقيقة واحدة ، أي 1000 مللي ثانية ثابتة طالبة طويلة One_Minute = 1000 ؛ // يجب أن يكون القسم الإحصائي الذي يستغرق وقتًا للوقت لطبقة الخدمة نهائية لنوع السلسلة ، يمكن أن تكون المتغيرات التي يتعين استخدامها في التعليقات التوضيحية فقط ثابتة ثابتة في السلسلة النهائية الثابتة الثابتة = "التنفيذ (*com.blinkfox.test.service.impl.*.*(..))" ؛ / ** * التنفيذ المستهلك للوقت للطريقة الإحصائية حول الإخطار المحيط * param JoinPoint * @REGING */ AROUND (point) الكائن العام timeAround (proseingJoinpoint Joinpoint) {// تحديد المعلمات المطلوبة لإرجاع الكائن والحصول على الطريقة. كائن obj = null ؛ Object [] args = joinpoint.getargs () ؛ وقت بدء طويل = system.currentTimeMillis () ؛ حاول {obj = joinpoint.proceed (args) ؛ } catch (throwable e) {logger.error ("أخطاء الإحصائيات في الإخطارات المحيطة التي تستغرق وقتًا طويلاً" ، e) ؛ } // الحصول على اسم طريقة التنفيذ long endtime = system.currentTimeMillis () ؛ توقيع methodsInclate = (MethOmSignature) joinpoint.getSignature () ؛ String methodName = signature.getDeclaringTyPename () + ".". + signature.getName () ؛ // طباعة المعلومات المستهلكة للوقت this.printexectime (MethodName ، وقت البدء ، نهاية الوقت) ؛ إرجاع OBJ ؛ } /*** طباعة المعلومات المستهلكة للوقت التي تطبع تنفيذ الطريقة. إذا تجاوز وقتًا معينًا ، فطبع * param methodname * param startTime * param endtime */ private void printexectime (سلسلة methodname ، وقت بدء طويل ، نهاية طويلة) {long difftime = endtime - starttime ؛ if (difftime> One_minute) {logger.warn ("-----" + methodName + "method time:" + difftime + "ms") ؛ }}} ملاحظة: أخيرًا ، تحتاج إلى إضافة التكوين المطلوب بواسطة AOP في ملف applicationContext.xml <aop:aspectj-autoproxy/> حتى يتمكن الربيع من التعرف عليه.
لخص
ما سبق هو كل شيء عن استخدام الربيع AOP لتسجيل وقت التنفيذ. آمل أن يكون محتوى هذه المقالة من بعض المساعدة في دراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.