تقدم هذه المقالة طريقة استخدام AOP في Springboot Project. سوف أشاركها معك. التفاصيل كما يلي:
1. نظرة عامة
يمكن أن يؤدي استخدام المنطق العام لتنفيذ تقنية AOP إلى تبسيط كتابة البرامج ، مثل التحقق من التوقيع ، والمصادقة ، وما إلى ذلك.
للحصول على رمز محدد ، يرجى الرجوع إلى مثال Project https://github.com/qihaiyan/springcamp/tree/master/spring-aop
تقنية AOP في الربيع لديها أربعة مفاهيم أساسية:
PointCut: Cut Point ، تستخدم لتحديد الطريقة التي سيتم اعتراضها ، على سبيل المثال التنفيذ (*cn.springcamp.springaop.service.*.*(..))
النصيحة: الإجراء الذي سيتم تنفيذه بعد اعتراض الطريقة
الجانب: شريحة ، وجمع بين النقاط والنصيحة معًا لتشكيل سطح مقطوع
نقطة انضمام: مثيل نقطة أثناء التنفيذ
ويفر: إطار لتنفيذ AOP ، مثل SideJ أو Spring AOP
2. تعريف نقطة التعريف
تشمل تعريفات النقاط الشائعة الاستخدام التنفيذ والإعداد. يحدد التنفيذ طريقة خالية من الطريقة ويستخدم لتنفيذ قسم شائع نسبيًا. يمكن إضافة @القوانين كشرح توضيحي لطرق محددة ، مثل شرح معاملات الربيع.
يجب وضع تعريف نقاط التنفيذ في فئة عامة لإدارة تعريف نقاط النقاط مركزيًا.
مثال:
الفئة العامة commonjoinpointConfig { @pointcut ("التنفيذ (*cn.springcamp.springaop.service.*.*.وبهذه الطريقة ، في فئة الجوانب المحددة ، يمكنك الرجوع إلى نقطة الظل من خلال commonoinpointConfig.Servicelayerexecution ().
الفئة العامة beoreaspect {before ("commonJoinPointConfig.ServicElayerexecution ()") public void قبل (JoinPoint JoinPoint) {system.out.println ("---------------> قبل الجانب") ؛ System.out.println ("-----------------> قبل تنفيذ" + JoinPoint) ؛ }}عندما تحتاج نقطة الظل إلى تغيير ، تحتاج فقط إلى تعديل فئة CommonoInPointConfig ، دون تعديل كل فئة من الجوانب.
3. قطع الوجه شائع الاستخدام
قبل: تنفيذ النصيحة قبل تنفيذ الطريقة ، والتي يتم استخدامها غالبًا للتحقق من التوقيع ، والمصادقة ، إلخ.
بعد: التنفيذ بعد اكتمال تنفيذ الطريقة ، سواء كان التنفيذ ناجحًا أو تم إلقاء الاستثناء.
بعد التحول: تنفيذ فقط بعد نجاح تنفيذ الطريقة.
بعد ذلك: تنفيذ فقط بعد أن يلقي تنفيذ الطريقة استثناء.
جانب بسيط:
ide @ @componentpublic class beoreaspect {before ("commonjoinpointConfig.ServicElexEcution ()") public void قبل (JoinPoint joinpoint) {system.out.println ("---------------> قبل الجانب") ؛ System.out.println ("----------------> قبل تنفيذ" + JoinPoint) ؛ }}4. التعليقات التوضيحية المخصصة
لنفترض أننا نريد جمع وقت تنفيذ طريقة محددة ، وهي طريقة أكثر منطقية هي تخصيص شرح شرح ثم إضافة هذا التعليق التوضيحي إلى الطريقة التي تحتاج إلى جمع وقت التنفيذ.
أولاً ، حدد وقت التعليق التوضيحي:
target ({elementType.method ، elementType.type}) @entry (enthypolicy.runtime) public interface tracktime {String param () افتراضي "؛}ثم حدد فئة من الجوانب لتنفيذ سلوك التعليق التوضيحي:
@Side@ComponentPublic Class TrackEaseSpect {AROUND ("@enrotation (TrackTime)") كائن عام حول (proseingJoinPoint JoinPoint ، TrackTime TrackTime) يلقي رمي {Object result = null ؛ وقت بدء طويل = system.currentTimeMillis () ؛ النتيجة = joinpoint.proceed () ؛ timetaken = system.currentTimeMillis () - وقت البدء ؛ System.out.println ("--------------> الوقت الذي يتم استغرقه" + JoinPoint + "مع param [" + tracktime.param () + "] هو" + timetaken) ؛ نتيجة العودة }}باستخدام هذا التعليق التوضيحي على طريقة ما ، يمكنك جمع وقت تنفيذ هذه الطريقة:
trackTime (param = "myService") public string runfoo () {system.out.println ("----------------> foo") ؛ إرجاع "فو" ؛}لاحظ أنه يمكن تمرير التعليق التوضيحي trackTime (param = "myService").
لكي يتم نقل التعليقات التوضيحية لتمرير المعلمات ، تحتاج إلى تحديد سلسلة معلمة Param () افتراضي "افتراضي" عند تحديد التعليقات التوضيحية.
في الوقت نفسه ، في فئة الجوانب ، تتم إضافة المعلمات المقابلة إلى الطريقة حول. مطلوب أيضًا الاسم المتغير للمعلمة ليكون TrackTime في التعليق التوضيحي @Around ، ولكن ليس اسم TrackTime اسم الفصل.
@AROUND ("@enrotation (tracktime)") كائن عام حول (proseingJoinPoint JoinPoint ، TrackTime TrackTime)5. ملخص
عند تشغيل مشروع العينة ، تقوم وحدة التحكم بإخراج ما يلي:
----------------> قبل الجانب
--------------> قبل تنفيذ التنفيذ (سلسلة cn.springcamp.springaop.service.myservice.runfoo ())
---------------> فو
---------------> الوقت الذي يستغرقه التنفيذ (String cn.springcamp.springaop.service.myservice.runfoo ()) مع param [myservice] هو 8
---------------> بعد الجانب
--------------> بعد تنفيذ التنفيذ (سلسلة cn.springcamp.springaop.service.myservice.runfoo ())
---------------> الجانب بعد الظهر
----------------> التنفيذ (سلسلة cn.springcamp.springaop.service.myservice.runfoo ())
يمكن ملاحظة أن ترتيب التنفيذ لعدة جوانب هو قبل أن يتجول بعد ذلك (متأخرة)
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.