Spring هو إطار مفتوح المصدر الذي ينفذ بشكل أساسي شيئين ، IOC (انعكاس التحكم) و AOP (البرمجة الموجهة نحو المقطعين).
IOC
الانقلاب السيطرة ، والمعروف أيضا باسم انعكاس التبعية.
يعني ما يسمى التبعية ، من منظور البرنامج ، أنه على سبيل المثال ، على سبيل المثال ، إذا أراد أن يتصل بأسلوب B ، فإن A يعتمد على B. على أي حال ، إذا أراد A استخدام B ، فإن A يعتمد على B. الحصول على مثيلات B (بالطبع ، هناك العديد من أنماط التصميم التي يمكن أن تساعدك في الحصول على مثيلات B ، مثل المصانع ، المحدد ، وما إلى ذلك) ، ثم يمكنك استدعاء كائن B. لذلك ، فإن عدم الانقلب يعني أن A يجب أن تحصل بنشاط على B قبل استخدام B ؛ في هذه المرحلة ، يجب أن تفهم معنى المقلوب. يعني العكس أنه إذا أراد A الاتصال B ، فلا يحتاج A إلى الحصول على B بفعالية ، لكن الآخرين سيقومون تلقائيًا بتسليم B إلى الباب.
ما يسمى انعكاس التحكم هو نقل قوة التحكم. لإعطاء مثال: إذا كان الشخص يريد القيادة ، في ظل الظروف العادية ، يجب على الشخص البحث عن السيارة بنفسه. بعد تحقيق انعكاس التحكم ، لا يحتاج الشخص إلى التفكير في المكان الذي تأتي منه السيارة ، فقط القيادة مباشرة ، ويقوم الشخص بنقل السيطرة على السيارة إلى كائنات أخرى. جرب الرمز التالي
تحديد سيارة واجهة
واجهة عامة السيارة {void go () ؛}حدد نوعين من السيارات
الفئة العامة بنز تنفذ سيارة {public void go () {system.out.println ("Benz go ...") ؛ }} الفئة العامة BMW تنفذ Car {public void go () {system.out.println ("BMW GO ...") ؛ }}فيما يلي قيادة
شخص الطبقة العامة {Car Car = New Benz () ؛ void drivecar () {system.out.println ("begin drive") ؛ car.go () ؛ }}هذه عملية التحكم في الكود العادي. إذا كنت ترغب في القيادة ، فيجب عليك إنشاء إنشاء سيارة بمفردك. ومع ذلك ، في هذه الحالة ، يمكن لهذا الشخص قيادة سيارة واحدة فقط. كيف يمكن أن يكون هذا الشخص قادرًا على قيادة السيارات المختلفة؟ هو لتحقيق الانعكاس السيطرة. وبعبارة أخرى ، إذا لم يعد الشخص قد قام بتثبيت السيارة بنفسه ، فكيف يمكن للشخص الحصول على هدف السيارة؟ يمكننا استخدام حقن التبعية (DI لفترة قصيرة) للحصول على كائن السيارة ، وبالتالي تحقيق انعكاس التحكم. لذلك ، نحن بحاجة إلى تعديل فئة الشخص
شخص الطبقة العامة {Car Car = null ؛ الشخص العام (سيارة السيارة) {this.car = car ؛ } void drivecar () {system.out.println ("begr drive") ؛ car.go () ؛ }}لم تعد فئة الشخص الحالية مثبتة على كائن السيارة نفسه ، ولكنها تستخدم المُنشئ للحصول على كائن السيارة. لذلك ، يمكن لهذه الفئة قيادة السيارات المختلفة ، طالما أن السيارة تنفذ واجهة السيارة. انظر كيفية استخدام فئة الشخص
public static void main (string [] args) {person p = new person (new benz ()) ؛ P.DriveCar () ؛}يمكن لفئة الشخص قيادة أكثر من نوع واحد من السيارات طالما قمت بتمريرها عبر المنشئ. في هذا المثال ، فإن كائن السيارة هو تبعية فئة الشخص. عندما نستند إلى فئة الشخص ، فإن تمرير مثيل السيارة إلى فئة الشخص هو حقن التبعية. فئة شخصنا وهكذا تنفذ الانعكاس السيطرة.
ماذا بالضبط يعكس الانعكاس السيطرة؟ هناك قول: ما يسمى الانعكاس التحكم هو عملية الحصول على تبعيات الكائنات. بعد عكس حقوق التحكم ، تتغير عملية الحصول على كائنات تابعة من إدارتها إلى الحقن بواسطة حاوية IOC.
ينفذ الربيع حقن التبعية
في السطر المذكور أعلاه من الكود ، الشخص P = شخص جديد (New Benz ()) ؛ ، نكون ن جديدًا يدويًا كائن Benz () وحقنه في فئة الشخص. الربيع لا يفعل ذلك لأن الربيع يشعر أن خط الرمز الخاص بك يثبت فئة بنز معينة. إذا كنت ترغب في إنشاء فئة BMW هنا في المستقبل ، ألا تحتاج إلى تعديل الرمز؟ ثم سأكتبه فقط في ملف التكوين. حتى لو كنت بحاجة إلى الانتباه في المستقبل ، على الأقل لا تحتاج إلى تعديل الرمز ، وبالتالي فإن التكوين التالي متاح.
<Beans> <bean id = "car" /> <bean id = "person"> <property name = "car" ref = "car" /> <bean /> </bans>
ثم ، يوفر الربيع بعض الآليات. عند الحصول على كائن فئة الشخص من ملف التكوين ، سيتم تجميع كائن السيارة الذي يأتي فيه ، ولا يحتاج كائن الشخص إلى القلق بشأن فئة محددة يتم تمريرها. لذلك ، الربيع ، كإطار IOC ، يتخذ أساسًا خطوتين: إنشاء كائن وتجميع العلاقة بين الكائنات.
aop
AOP (البرمجة الموجهة إلى جانب) هي برمجة موجهة نحو الجانب. اسمحوا لي أن أعطيك مثالا على أي جانب هو. في مشروع موقع ويب كامل ، يجب تسجيل العديد من الوحدات ، ويجب تسجيل العديد من الأماكن ، ويجب أن تكون العديد من الأماكن معالجة استثناء. التسجيل والتسجيل ومعالجة الاستثناءات والمنطق الأخرى هي ما يسمى الأقسام. على افتراض أنني أكتب منطق هذه الأقسام في كل مكان ، يمكن تخيل قابلية الصيانة للرمز. AOP هو تحقيق فصل المخاوف ، واستخراج منطق هذه الأقسام وكتابتها في فئات منفصلة ، ثم إيجاد طريقة لتجميعها مع وحدات عامة للتنفيذ. الوحدات النمطية العادية لا تعرف حتى أنها قامت بتجميعها بأقسام وأقسام.
الهدف من البرمجة الموجهة نحو الجانب هو فصل التركيز. ما هو التركيز؟ هذا ما عليك فعله ، إنه تركيز. إذا كنت شابًا ولم يكن لديك أهداف حياة ، فأنت بحاجة فقط إلى ارتداء الملابس وتناول الطعام ، وأنت تعرف فقط شيئًا واحدًا للعب طوال اليوم! لذا ، كل يوم عندما تفتح عينيك ، تريد فقط اللعب بعد العشاء (الأشياء التي عليك القيام بها) ، ولكن قبل اللعب ، تحتاج أيضًا إلى ارتداء الملابس ، وارتداء الأحذية ، واللحف ، والطهي ، وما إلى ذلك. كل هذه الأشياء تركت للآخرين للقيام بها. قبل أن تمشي إلى طاولة الطعام ، يوجد خادم خاص لمساعدتك في ارتداء ملابس ، خادم ب لمساعدتك على وضع الأحذية ، خادم C لمساعدتك على طي اللحاف ، خادم C لمساعدتك في الطهي ، ثم تبدأ في تناول الطعام واللعب (هذا هو عملك يومك). بعد الانتهاء من يومك ، تعود ، وتبدأ سلسلة من الخدم في مساعدتك في القيام بذلك وذلك ، ثم انتهى اليوم!
ميزة AOP هي أنك تحتاج فقط إلى القيام بعملك المهم والآخرين سوف يساعدك في أشياء أخرى. ربما في يوم من الأيام ، إذا كنت ترغب في الركض عارياً ولا تريد ارتداء الملابس ، فأنت فقط تطلق النار على خادمك! ربما في يوم من الأيام ، تريد إحضار بعض المال قبل الخروج ، حتى تتمكن من استئجار خادم آخر لمساعدتك في الحصول على المال! هذا هو AOP. يقوم الجميع بواجباتهم ويجمع بين مرونة لتحقيق بنية برنامج قابلة للتكوين قابلة للتوصيل.
من وجهة نظر الربيع ، فإن الغرض الأكبر من AOP هو توفير قدرات إدارة المعاملات. إدارة المعاملات هي التركيز. عملك هو الوصول إلى قاعدة البيانات ، ولا تريد إدارة المعاملات (مزعجة للغاية). لذلك ، ستبدأ Spring تلقائيًا المعاملة قبل الوصول إلى قاعدة البيانات ، وسوف تلتزم/تراجع المعاملات تلقائيًا بعد الوصول إلى قاعدة البيانات!
انظر إلى الكود التالي ، لا يهم إذا كنت لا تفهمه
<bean id = "reparts" /> <aop: config> <aop: side ref = "upervation"> <aop: pointcut id = "performance" expression = "execution (* com.SpringInAction.springidol.performer.perform (..))" /> <aop: in pointcut-ref = "performance" = <aop: قبل pointcut-ref = "performance" method = "turnoffcellphones" /> <!-<co id = "co_refpointcut" />-> <aOP: بعد العودة إلى rref = "performance" method = "tampaud" /> <! method = "requiredRefund"/> <!-<co id = "co_refpointcut"/>-> </aop: side> </aop: config>
المعنى تقريبًا للتكوين أعلاه هو أنه عندما تكون طريقة المؤدي. قبل تنفيذ الطريقة المستهدفة ، قم أولاً بتنفيذ أساليب الجمهور. عند تنفيذ الطريقة المستهدفة وإرجاعها ، قم بتشغيل طريقة AudienCeturn.applaud (). إذا كانت الطريقة المستهدفة تلقي للأسف استثناء ، فسيقوم الوكيل بتشغيل طريقة AudienCeturn.demandRefund (). باختصار ، تراقب فئة وكيل Spring تنفيذ الطريقة المستهدفة في جميع الجوانب ، في حين أن الطريقة المستهدفة تركز فقط على شؤونها الخاصة ولا تعرف حتى وجود فئة الوكيل.
لخص
ما ورد أعلاه هو كل شيء عن فهم بسيط لأمثلة IOC و AOP و AOP والرمز. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
مقدمة مفصلة لتنفيذ محاكاة IOC في الربيع
الربيع AOP Intercept-ثلاثة طرق لتنفيذ شرح مفصل للوكيل التلقائي
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!