جافا ربيع اقتران فضفاض
المفهوم الموجهة للكائن هو تصميم جيد لكسر النظام إلى مجموعة من الكائنات القابلة لإعادة الاستخدام. ومع ذلك ، عندما يصبح النظام أكبر ، خاصة في مشاريع Java ، فإن تبعيات الكائنات الضخمة ستكون دائمًا مقترنة بإحكام لجعل الكائنات صعبة لإدارة أو تعديلها. في هذه الحالة ، يمكن إدارة جميع تبعيات الكائنات بسهولة وكفاءة باستخدام إطار الربيع كوحدة أساسية.
مثال على مولد الإخراج
دعونا نلقي نظرة على مثال ، لنفترض أن مشروعك لديه إخراج وظائف بتنسيق CSV أو JSON. قد يبدو الرمز الخاص بك مثل المثال التالي:
ملف: iOutputGenerator.java حزمة واجهة المولد المخرج com.yiibai.output ؛ الواجهة العامة iOutputGenerator {public void cenerateoutput () ؛} الملف: csvoutputgenerator.java A CSV يتم استخدام مولد إخراج CSV لتنفيذ واجهة eAtputGenerator. package com.yiibai.output.impl ؛ import com.yiibai.output.ioutputGenerator ؛ public csvoutputGenerator تنفذ iOutputGenerator {public void generateoutput () {system.out.println ("Generator CSV Output") ؛ }} ملف: jsonoutputgenerator.java يتم استخدام مولد إخراج JSON لتنفيذ واجهة iOutputGenerator. package com.yiibai.output.impl ؛ import com.yiibai.output.ioutputGenerator ؛ public class jsonoutputgenerator تنفذ iOutputGenerator {public void cenerateoutput () {system.out.println ("json outputenrator") ؛ }} هناك عدة طرق للاتصال بـ iOutputGenerator ، وكيفية استخدام الربيع لتجنب أن يتم ربط الكائنات بشكل وثيق مع بعضها البعض.
1. الطريقة 1 تسمى مباشرة
الطريقة العادية هي تسميتها مباشرة.
package com.yiibai.common ؛ import com.yiibai.output.ioutputGenerator ؛ import com.yiibai.output.impl.csvoutputgenerator ؛/ * http:///www.manongjc.com/article/1602.html */public class appl csvoutputGenerator () ؛ output.generateOutput () ؛ }}
هناك مشاكل
وبهذه الطريقة ، تتمثل المشكلة في أن "الإخراج" يقترن بإحكام بـ CSVOutputGenerator ، وقد يتضمن كل تغيير تم إنشاؤه بواسطة الإخراج تغييرات رمز. إذا كان هذا الرمز منتشراً خلال مشروعك ، فإن كل تغيير تم إنشاؤه بواسطة الإخراج سيؤدي إلى معانتك.
الطريقة 2 نسميها مع فئة المساعد
ربما تريد إنشاء فئة مساعد لتنفيذ جميع الإخراج داخل الفصل.
package com.yiibai public OutPuthelper () {outputGenerator = csvoutputGenerator () جديد ؛ } public void generateOutput () {outputGenerator.generateOutput () ؛ }} نسميها من خلال فئة المساعد
package com.yiibai.common ؛ import com.yiibai.output.outputhelper ؛ applic class {public static void main (string [] args) {outPuthelper output = new OutPuthelper () ؛ output.generateOutput () ؛ }}هناك مشاكل
هذا يبدو أكثر أناقة من ذي قبل ، مجرد إدارة فئة المساعدة ، ولكن لا يزال فئة المساعدة مقترنة بإحكام مع CSVOutputGenerator ، وكل تغيير تم إنشاؤه بواسطة الإخراج لا يزال يتضمن تغييرات رمز صغيرة.
الطريقة 3 الربيع
في هذه الحالة ، يعد حقن التبعية في الربيع (DI) خيارًا جيدًا. يتيح Spring أن يكون توليد الإخراج مقترنًا بشكل فضفاض بمولد الإخراج.
فئة OutPuthelper لديها تعديلات أصغر.
package com.yiibai public void generateOutput () {outputGenerator.generateOutput () ؛ } public void setoutputGenerator (iOutPutGenerator OutputGenerator) {this.outputGenerator = outputGenerator ؛ }} قم بإنشاء ملف تكوين Bean Spring وأعلن جميع تبعيات كائنات Java هنا.
<!-Spring-common.xml-> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3 cation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id = "outputhelper"> <property name = "outputgenerator" ref = "csvoutputGenerator" /> </bean> <bean id = "csvoutputGenerator" /> <bean id = "jsonoutputgenerator" /> </beans>
نسميها خلال الربيع
package com.yiibai.common ؛ استيراد org.springframework.context.applicationContext ؛ استيراد org.springframework.context.support.classpathxmlabplicationContext classpathxmlapplicationContext (سلسلة جديدة [] {"spring-common.xml"}) ؛ OutPuthelper Output = (OutPuthelper) Context.getBean ("OutPuthelper") ؛ output.generateOutput () ؛ }} الآن ، فقط قم بتغيير ملف Spring XML باستخدام مولد إخراج مختلف. تعديل ملفات XML الربيع فقط دون تعديلات غير خاضعة للرقابة يعني أقل من الأخطاء.
الخلاصة: مع إطار الربيع - يعد حقن التبعية (DI) مفيدًا لإدارة تبعية الكائنات ، مما يجعله أكثر أناقة ومرونة للغاية وسهلة في إدارة مشاريع Java الكبيرة.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!