مقدمة
AOP هو اختصار للبرمجة الموجهة نحو الجانب. إنه مفهوم عكس البرمجة الموجهة للكائنات. في البرمجة الموجهة للكائنات ، نميل إلى تبني مفاهيم مثل التغليف والميراث وتعدد الأشكال لتنفيذ كل وظيفة في الكائن. ومع ذلك ، في المواقف الفعلية ، وجدنا أيضًا أن هناك هناك حاجة إلى نوع آخر من الحاجة إلى نوع من الوظائف في العديد من طرق العديد من الكائنات. على سبيل المثال ، بعض الطرق للوصول إلى قاعدة البيانات لها متطلبات إدارة المعاملات ، والعديد من الطرق تتطلب سجلات الطباعة. بطريقة موجهة نحو الكائن ، يجب تنفيذ هذه الوظائف نفسها في العديد من الأماكن أو استدعاءها في العديد من الأماكن. هذا أمر مرهق للغاية ويقترن بشكل وثيق مع هذه المتطلبات المستقلة عن الأعمال. بعد ذلك ، بدا أن البرمجة الموجهة نحو الجانب تحل هذا النوع من المشاكل ، وقامت بمكملات جيدة للبرمجة الموجهة للكائنات
مفهوم
لفهم البرمجة الموجه نحو الظل بشكل جيد ، يجب أولاً فهم بعض مفاهيم AOP. في Java ، يقوم SideBJ بتنفيذ وظائف AOP بطريقة كاملة نسبيًا ، ولكن من المفيد أيضًا استخدامها ، لذلك هنا هو مناقشة AOP في Spring. يتبنى Spring AOP مبدأ البساطة والكفاقة لتحقيق الوظائف الأساسية لـ AOP. دعنا نتحدث عن المفاهيم المحددة في AOP أولاً
تنفيذ AOP Sprinboot
لقد استخدمنا عدة فصول لوصف الاستخدام الأساسي لـ Springboot. لذلك نستخدم هنا Springboot و AOP للاندماج لتنفيذ وظيفة لإخراج جميع معلمات إدخال واجهة REST وسجلات معلمات إرجاع.
تنفيذ وظيفة خدمة الراحة.
وفقًا للمقال السابق ، سنقوم أولاً ببناء مشروع Springboot كما هو موضح في الشكل التالي
مشروع التجريبي
تكوين مشروع Springboot
نقوم بتكوين مشاريع Springboot على النحو التالي
الخادم: المنفذ: 3030 servlet: مسار سياق: /aop-demospring: جاكسون: تاريخ التاريخ: yyyy-mm-dd hh: mm: ss التسلسل: المسافة البادئة: truelogging: المستوى: com.yanggch: debug
التكوين المتعلق بـ Jackson هو إخراج الكائنات في سلاسل JSON وتنسيق الإخراج.
فئة وحدة التحكم التي تنفذ واجهة الراحة
هنا ننفذ اثنين من واجهات الراحة. واحد هو إعادة معلومات مرحبا. واحد هو إرجاع معلومات تسجيل الدخول بناءً على الإدخال.
package com.yanggch.demo.aop.web ؛ import com.yanggch.demo.aop.domain.logentity ؛ import com.yanggch.demo.aop.domain.security org.springframework.web.bind.annotation.requestbody ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework java.util.date ؛/*** خدمة الراحة المتعلقة بالأمان** @Author: Yang Gaochao* since: 2018-05-27*/ @restController @requestMapping (/api/v1/security ") الأمان العام الأمان login ( @requestbody logenceity logentity ، pathvariable long ShopId) {securityentity security = new Securityentity () ؛ الأمن. securityentity.setAccount (logenting.getAccount ()) ؛ securityentity.setpwd (logenting.getpwd ()) ؛ securityentity.setLogIntime (تاريخ جديد ()) ؛ إرجاع الأمن ؛ } @requestmapping (value = "/echo/{name}" ، method = requestMethod.get) تسجيل الدخول إلى السلسلة العامة (اسم سلسلة pathvariable) {return "hello ،" + name ؛ }}أولاً ، نريد إخراج معلمات الإدخال ونتائج إرجاع جميع واجهات REST إلى السجل من خلال وظيفة AOP.
تنفيذ وظائف AOP الويب.
package com.yanggch.demo.aop.comment ؛ استيراد com.fasterxml.jackson.databind.objectmapper ؛ استيراد org.aspectj.lang.joinpoint ؛ import org.aspectj.lang.annotation.aspect org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframework.beans.factory.annotation. javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletresponse ؛/*** web interface log** author: yang gaochao* @since: 2018-05-27*/ @inform @compublic. loggerfactory.getLogger (WebLogaspect.class) ؛ كائن نهائي خاص mapper ؛ woblogaspect العامة autowired (ObjectMapper mapper) {this.mapper = mapper ؛ } @pointcut (" @annotation (org.springframework.web.bind.annotation.requestmapping)") public void woblog () {} @before ("woblog () httpservletrequest ||. } حاول {if (log.isdebugenabled ()) {log.debug (joinpoint.getTarget (). getClass (). getName () + ". }} catch (استثناء e) {E.PrintStackTrace () ؛ }}} @AfterReturning (returning = "response" ، pointcut = "weblog ()") public void doAfterReturning (استجابة الكائن) رمي {if (response! = null) {log.debug ("معلمة الاستجابة:" + mapper.writevalueasstring (response)) ؛ }}}فيما يلي بعض الأشياء التي يجب الانتباه إليها.
امتحان
في المقدمة ، يتم بدء الطلب من خلال ساعي البريد ، ونتيجة إدخال سجل الخلفية على النحو التالي
2018-05-27 19: 58: 42.941 Debug 86072 --- [Nio-3030-Exec-4]
"الحساب": "يانغغش" ،
"PWD": "123456"
}
2018-05-27 19: 58: 42.941 Debug 86072 --- [Nio-3030-Exec-4]
2018-05-27 19: 58: 42.942 Debug 86072 --- [NIO-3030-EXEC-4]
"Shopid": 2001 ،
"الحساب": "يانغغش" ،
"PWD": "123456" ،
"logintime": "2018-05-27 11:58:42"
}
2018-05-27 19: 58: 45.796 Debug 86072 --- [NIO-3030-EXEC-5]
2018-05-27 19: 58: 45.796 Debug 86072 --- [Nio-3030-Exec-5] C.Yanggch.demo.aop.comment.weblogaspect: معلمة الاستجابة: "Hello ، Yanggch"
من هذا ، يمكننا أن نرى أنه على الرغم من أننا لا نكتب الرمز لإخراج السجل في طريقة واجهة REST ، يمكننا تلقائيًا إضافة الرمز لإخراج معلمات الإدخال وإرجاع معلمات كل طريقة إدخال REST من خلال AOP وتنفيذها بشكل صحيح.
تعليمات أخرى
تم ذكر أنواع النصائح ولغة التعبير AOP لـ PointCut سابقًا. للحصول على مراجع محددة ، يرجى الرجوع إليها على النحو التالي.
نوع النصيحة
لغة التعبير AOP
1. مطابقة المعلمة الطريقة
ARGS ()
2. طريقة الوصف مطابقة
التنفيذ (Modifiers-Pattern؟ Ret-type-type-type-type-type؟ name-pattern (param-pattern) remith-pattern؟)
حيث يكون نمط النوع العائد ونمط الاسم ونمط المعلمات ضروريًا.
. RET-TYPE-PINERN: يمكن أن يكون اسم فئة يمثل أي قيمة إرجاع ، مسار كامل ، إلخ.
*. النمط الاسم: حدد اسم الطريقة ، * يمثل كل شيء
.Set تمثل جميع الطرق التي تبدأ مع مجموعة.
. نمط المعلمات: تحديد معلمات الطريقة (النوع المعلن) ، (..) يمثل جميع المعلمات ، و () يمثل معلمة واحدة
. (، السلسلة) تعني أن المعلمة الأولى هي أي قيمة والثاني من سلسلة النوع.
3. مطابقة نوع كائن الوكيل AOP الحالي
4. مطابقة الطبقة المستهدفة
@هدف()
@داخل()
5. طرق مطابقة مع هذا التعليق التوضيحي
@annotation ()
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.