ملخص
وحدة SPIRNG-AOP هي الوحدة الأساسية في إطار الربيع. على الرغم من أن حاوية IOC الربيعية لا تعتمد على AOP ، إلا أن AOP توفر حلاً قويًا ومرنًا لتنفيذ IOC.
في إطار الربيع ، يستخدم AOP بشكل أساسي لغرضين:
من منظور وظيفي ، يمكن اعتبار AOP بمثابة مكمل لطريقة برمجة OOP ، مما يوفر طريقة مختلفة لمؤسسة الكود أو النظام. المفهوم الأساسي في OOP هو الطبقة ، وفي AOP هو الجانب.
وحدة SPIRNG-AOP هي الوحدة الأساسية في إطار الربيع. على الرغم من أن حاوية IOC الربيعية لا تعتمد على AOP ، إلا أن AOP توفر حلاً قويًا ومرنًا لتنفيذ IOC.
في إطار الربيع ، يستخدم AOP بشكل أساسي لغرضين:
يتم تنفيذ Spring AOP في Java النقي ، ولا يتطلب معالجة تجميع خاصة ولا يتطلب التحكم في التسلسل الهرمي لعملية تحميل الفئة ، بحيث يمكن استخدامها لحاوية Servlet وخوادم التطبيق الأخرى.
يدعم Spring AOP حاليًا فقط التبديل على مستوى الطريقة أو اعتراضه ، ولا يتم دعم اعتراض السمات الآن. إذا كنت ترغب في اعتراض السمات ، فيمكنك التفكير في استخدام لغة SideJJ.
يتم استخدام الربيع AOP بشكل مختلف عن معظم أطر AOP الأخرى. الغرض الرئيسي من ذلك هو عدم توفير مجموعة كبيرة وشاملة من تطبيقات AOP ، ولكن لدمج تطبيقات AOP المختلفة والتعاون مع SPRING IOC للمساعدة في حل بعض المشكلات الشائعة.
تجدر الإشارة إلى أن بعض المشورة للحبوب (مثل نموذج المجال) ، وغالبًا ما لا يوفر Spring AOP دعمًا جيدًا ، ولا يزال هذا السيناريو يعتبر SideJ. ومع ذلك ، في التجربة العامة ، لا تزال آلية Spring AOP القوية تحل المشكلات في معظم السيناريوهات.
فكيف يجب أن ننظر إلى AOP Spring و SideJ ، نقلاً عن النص الأصلي لمستندات الربيع الرسمية:
لن يكافح Spring AOP أبدًا للتنافس مع Sidejj لتوفير حل AOP شامل. نحن نعتقد أن كلا من الأطر القائمة على الوكيل مثل Spring AOP والأطر الكاملة مثل Sidejj ذات قيمة ، وأنها كاملة ، وليس في المنافسة. يدمج الربيع بسلاسة AOP و IOC مع SideJ ، لتمكين جميع استخدامات AOP من أن يتم تلبية احتياجات بنية التطبيقات المستندة إلى الربيع. لا يؤثر هذا التكامل على واجهة برمجة تطبيقات الربيع AOP أو AOP Alliance API: يظل الربيع AOP متوافقًا مع المتخلفين.
في جميع تصميمات وحدة الإطار الربيعي ، واحدة من المبادئ الأساسية التي يتم الالتزام بها دائمًا غير الغازية.
لذلك ، عند استخدام Spring AOP ، لن نجبرنا على إدخال فئات أو واجهات محددة في رمز العمل ، والتي يمكن أن تبقي الكود نظيفًا ومرفوبًا إلى أقصى حد. ومع ذلك ، يوفر Spring أيضًا خيارًا آخر ، إذا كان هناك سيناريو محدد ، فيمكنك تقديم AOP Spring AOP مباشرة في الكود الخاص بك. ستمنحك جميع الوحدات النمطية تقريبًا في أطر الربيع مجموعة متنوعة من الخيارات بالطريقة التي يتم بها استخدامها حتى يتمكن المستخدمون من اختيار طريقة أكثر ملاءمة لسيناريوهاتهم. استخدم SABNEJ أو SPRING AOP ، واستخدم التعليق التوضيحي أو طريقة تكوين XML ، يعتمد على U.
بعد فهم سيناريوهات النية الأصلية والاستخدام في الربيع AOP ، دعونا نلقي نظرة على مبدأ التنفيذ العام
يمكن حل معظم المشكلات في عالم البرمجيات عن طريق إضافة طبقة.
الطبقة المذكورة هنا هي بالطبع بالمعنى الواسع ، والتي يمكن أن تكون تجريدًا أو ذاكرة تخزين مؤقت ، مما يعني تقريبًا فئة العزلة والفصل.
في عالم الربيع ، سيوفر إدخال كل وحدة ، أو تكامل تقنيات الطرف الثالث ، دائمًا طبقة تجريبية ، وتوفير واجهة برمجة تطبيقات موحدة للمستخدمين ، وحظر جميع تفاصيل التنفيذ والاختلافات بين التطبيقات المختلفة. على سبيل المثال ، توفر وحدات مثل Cring Cach و SPRING-JDBC و Spring-JMS و Spirng-Messaging طبقة من التجريد.
تطبيق الربيع AOP هو آلية تعتمد على الوكيل ، والتي تستخدم الوكيل الديناميكي JDK افتراضيًا ، ويمكنه أيضًا استخدام وكيل CGLIB. الفرق بين الاثنين هو الفرق بشكل أساسي بين الكائنات التي يجري تنويعها. عندما يكون الكائن الهدف واجهة ، يمكن أن يكمل الوكيل الديناميكي JDK الوكيل ، ولكن عندما لا يقوم الكائن الهدف بتطبيق فئة الواجهة (حاول أن تكون أقل ، فإن البرمجة الموجهة نحو الواجهة هي عادة جيدة) ، فمن الضروري استخدام وكيل CGLIB لإكمال الوكيل. بالطبع ، يمكنك أيضًا إجبار الواجهة على استخدام CGLIB كبديل ؛ بالإضافة إلى ذلك ، عندما تحتاج إلى حقن أو الرجوع إلى أنواع محددة ، إذا كان الكائن المشار إليه هو بالضبط كائن الوكيل ، فأنت بحاجة أيضًا إلى استخدام طريقة CGLIB.
يمكن تقسيم التصميم الوظيفي والتنفيذ إلى جزأين رئيسيين
خلق AOP
الفئة الأساسية التي تنشئ كائن الوكيل ، proxyfactorybean getObject ()
الشكل التالي هو منطق اختيار ما إذا كنت تريد استخدام JDK أو CGLIB عند إنشاء وكيل:
بعد العثور على المنفذ المحدد لوكيل الجيل ، متى تسمى هذه العملية؟ يجب أن يعرف أولئك الذين فهموا دورة حياة حبوب الربيع أنه عند إنشاء الفاصوليا ، هناك سلسلة من واجهات رد الاتصال للمستخدمين لإدراج سلوكيات مخصصة للتأثير على بعض خصائص الفول. BeanpostProcessor هو واحد من الواجهات. تم تقديم المقالات السابقة (السلاح النهائي للعب مع حبوب الربيع). استفاد الربيع AOP من هذه الفرصة لإدراج خدعة في عملية إنشاء الفول. إذا كانت الفاصوليا التي يتم إنشاؤها هي هدفنا AOP ، فقم بإنشاء وكيل وأخيراً إرجاع كائن الوكيل إلى IOC.
AbstractAutoProxyCreator هذا الفئة هي تطبيق لـ BeanPostProcessor ، وتستخدم لإنشاء وكيل ، ومشاهدة طريقة ما بعد المعالجة لهذا المعالج ، وأخيراً إرجاع الوكيل الذي تم إرجاعه بواسطة طريقة CreateProxy ().
تعزيز التنفيذ لأقسام AOP
يمكن فهمه كمكالمة لجميع سلاسل التقاطع على الكائن الهدف
نظرًا لوجود تطبيقان محددان لـ Spring AOP ، وكيل JDK الديناميكي و CGLIB ، فإن طرق تنفيذ اعتراضات مختلفة. للحصول على التفاصيل ، يمكنك قراءة الكود المصدري JDKDynamicaopproxy Method
تعتمد الدعوة إلى الطريقة المستهدفة في نهاية المطاف على الانعكاس.
تستخدم عملية المعالجة في CremblureVemethodinvocation طريقة متكررة لعملية معالجة سلاسل اعتراض.
طريقة اعتراض cglibaopproxy
cglibmethodinvocation يرث الانعكاسفيميثودن ، ويتم استخدام طريقة العملية () أعلاه للتعامل مع سلاسل اعتراض.
تفاصيل لتلاحظها عند استخدام الربيع AOP:
1. الحلول هي:
2. عند حقن الفاصوليا ، إذا كنت ترغب في ضخ نوع محدد من الفول بدلاً من الواجهة ، فاستخدم cglib
الربيع AOP لديه وظائف قوية وتصميم ذكي. يتم فرز السياق الرئيسي هنا ، ولن تتم مناقشة التفاصيل واحدة تلو الأخرى.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.