سؤال

ما هي إيجابيات وسلبيات استخدام @Autowired في فئة من شأنها أن تكون سلكية قبل الربيع ؟

فقط لتوضيح أنا أتحدث تحديدا عن @Autowired الشرح وليس السيارات الأسلاك في XML.

ربما أنا فقط لا أفهم ذلك, لكن بالنسبة لي يبدو تقريبا مثل مضاد نمط الفصول الدراسية تبدأ في أن تصبح على بينة أنها مرتبطة دي الإطار بدلا من مجرد كونها POJOs.ربما أنا الشره العقاب ، ولكن أحب أن الخارجية XML config الفول, و أحب أن يكون صريحا التمديدات حتى أعرف بالضبط ما هو السلكية فيها.

هل كانت مفيدة؟

المحلول

لفترة طويلة كنت أعتقد أن هناك قيمة في وجود "مركزية التعريفي ، التكوين" مثل ملفات xml كنا الاستخدام.ثم أدركت أن معظم الأشياء في ملفات لم يكن التكوين - لم يتغير في أي مكان بعد التنمية ، من أي وقت مضى.ثم أدركت أن "المركزي" له قيمة إلا في النظم الصغيرة فقط في النظم الصغيرة سوف تكون قادرة على الإطلاق جروك ملف التكوين ككل.وما هو حقا قيمة فهم الأسلاك ككل ، عند نفس "التمديدات" هي في معظمها تكرار من تبعيات في الكود ؟ وبالتالي فإن الشيء الوحيد الذي حافظت هي البيانات الوصفية (الشروح) الذي لا يزال نوع من التعريفي.هذه أبدا تغيير في وقت التشغيل و هم أبدا "التكوين" البيانات أن شخصا ما سوف تغيير على الطاير - لذلك أعتقد أن الحفاظ عليه في مدونة لطيفة.

يمكنني استخدام السيارات الكاملة-الأسلاك بقدر ما أستطيع.أنا أحب ذلك.أنا لن أعود إلى الطراز القديم الربيع إلا إذا هدد في بندقية نقطة.أسباب تفضيل بالكامل @Autowired تغيرت مع مرور الوقت.

الآن أعتقد أن أهم سبب استخدام autowiring هو أن هناك واحد أقل التجريد في النظام الخاص بك لتتبع.إن "فول اسم" فعال ذهب.اتضح الفول الاسم موجود فقط بسبب xml.حتى طبقة كاملة مجردة indirections (حيث كنت سلك الفول اسم "فو" في فول "بار") هو ذهب.الآن أنا سلك "فو" واجهة في الفول مباشرة ، والتنفيذ يتم اختياره من قبل وقت تشغيل الملف.هذا يسمح لي أن العمل مع رمز عند تتبع تبعيات و تطبيقات.عندما أرى autowired التبعية في قانون بلدي أنا فقط اضغط على "الذهاب إلى التنفيذ" الرئيسية في IDE و يأتي قائمة المعروف تطبيقات.في معظم الحالات هناك واحد فقط تنفيذ و أنا على التوالي في الدرجة.لا يمكن أن يكون أبسط بكثير من ذلك, و أنا أعرف دائما بالضبط ما هو استخدام (أزعم أن العكس هو أقرب إلى الحقيقة مع xml الأسلاك - مضحك كيف المنظور الخاص بك التغييرات!)

الآن هل يمكن أن نقول أنه مجرد طبقة بسيطة جدا, ولكن كل طبقة من التجريد أن نضيف إلى أنظمتنا زيادة التعقيد.أنا حقا لا أعتقد xml من أي وقت مضى إضافة أي قيمة حقيقية إلى أي نظام لقد عملت مع.

معظم أنظمة من أي وقت مضى لقد عمل مع فقط واحد التكوين من إنتاج بيئة وقت التشغيل.قد يكون هناك غيرها من تكوينات اختبار وهلم جرا.

أود أن أقول أن autowiring هو روبي على القضبان الربيع:تحتضن فكرة أن هناك طبيعي وشائع الاستخدام نمط استخدام معظم الحالات.مع تكوين XML لك تصريح الكثير من ثابت/غير متناسقة التكوين الاستخدام التي قد لا تكون مقصودة.لقد رأيت الكثير تكوين xml تسرف مع التناقضات - هل ريفاكتوريد جنبا إلى جنب مع رمز ؟ اعتقد لا.هي تلك الاختلافات هناك لسبب ما ؟ عادة لا.

نحن بالكاد استخدام التصفيات في التكوين ، و وجدت طرق أخرى لحل هذه الحالات.هذا هو واضح "العيب" التي نواجهها:لقد تغيرت قليلا طريقة كود يجعل التفاعل أكثر سلاسة مع autowiring:العملاء مستودع لم تعد تطبق عامة Repository<Customer> واجهة ولكن نحن جعل واجهة CustomerRepository الذي يمتد Repository<Customer>.في بعض الأحيان هناك أيضا خدعة أو اثنين عندما يتعلق الأمر subclassing.لكنها عادة ما تكون مجرد نقطة في اتجاه أقوى الكتابة التي وجدت دائما أفضل حل.

ولكن نعم, أنت تحاول نمط معين من دي معظمها يفعل الربيع.نحن حتى لا تجعل الجمهور واضعي عن تبعيات أي أكثر من (لذلك يمكن القول أننا +1 في تغليف/إخفاء المعلومات قسم) لا يزال لدينا بعض xml في نظامنا ، ولكن xml الأساس فقط يحتوي على الشذوذ.كامل autowiring يدمج بشكل جيد مع xml.

الشيء الوحيد الذي نحن بحاجة إليه الآن هو @Component, @Autowired والباقي سيتم تضمينها في JSR (مثل JSR-250) ، لذلك لا يجب أن التعادل مع الربيع.هذه هي الطريقة التي كانت تحدث في الماضي (في java.util.concurrent الاشياء الينابيع إلى الذهن) ، لذلك أنا لن يفاجأ تماما إذا حدث هذا مرة أخرى.

نصائح أخرى

بالنسبة لي هنا هو ما أعجبني/لم يعجبني حول الربيع والسيارات الأسلاك.

الايجابيات:

  • السيارات الأسلاك يتخلص من سيئة تكوين XML.
  • أسهل بكثير من استخدام الشروح التي تسمح لك لحقن مباشرة باستخدام الحقول أساليب اضع أو المنشئات.أيضا يسمح لك علق و 'التأهل الخاص بك حقن الفاصوليا.

سلبيات:

  • باستخدام السيارات الأسلاك وشروحه يجعلك تعتمد على الربيع المكتبات حيث كما هو الحال مع تكوين XML يمكنك اختيار لتشغيل مع أو دون فصل الربيع.كما قلت لك تصبح مرتبطة دي الإطار.
  • في نفس الوقت أحب أن أكون قادرا على التأهل الفول لي هذا يجعل رمز فوضوي حقا.إذا كنت بحاجة إلى حقن نفس الفول في أماكن متعددة ، لقد رأيت نفس اسم السلسلة المتكررة في جميع أنحاء.بالنسبة لي هذا يبدو أن احتمالات الأخطاء.

لقد بدأت باستخدام السيارات الأسلاك بشكل حصري تقريبا في العمل لأننا نعتمد كثيرا على الربيع التكامل على أي حال أن التبعية المسألة خلافية.عملت على الربيع MVC مشروع السيارات المستعملة-الأسلاك على نطاق واسع قليلا من الصعب فهم.

أعتقد السيارات الأسلاك طعم مكتسب بمجرد أن تعتاد على ذلك كنت أدرك كيف قوية وسهلة أقل بكثير من الصداع هو العمل مع من تكوين XML.

نحن التحول من @Autowire إلى تكوين XML في المشروع الكبير.المشكلة هي منخفضة جدا التمهيد الأداء.Autowiring الماسح الضوئي يقوم بتحميل جميع الطبقات من autowiring البحث classpath لذا الكثير من الطبقات يتم تحميلها بفارغ الصبر خلال الربيع التهيئة.

كان هناك القليل جدا من النقاش حول التحول البيئات.معظم المشاريع التي عملت عليها كانت قضية حقيقية لحقن تبعيات اعتمادا على البيئة ونحن نعمل على.مع xml التكوين هو بسيط جدا مع الربيع EL, و أنا لست على علم بأي لطيفة الحل مع الشروح.لقد برزت واحد:

    @Value("#{${env} == "production" ? realService : dummyService}")
    private SomeService service;

ينبغي أن يكون العمل ، ولكن ليس حلا لطيفة imho.

لقد تحولت إلى @Autowire.الحفاظ على تكوين XML على أي شيء آخر غير مشروع صغير أصبحت مهمة في أنها تملك الحق والفهم بسرعة المتدهورة.

IntelliJ يوفر (غير مثالية) دعم الربيع الشروح.

بلدي يأخذ على هذا الموضوع هو أن تكوين xml تقلل من وضوح التعليمات البرمجية ، وخاصة في النظم الكبيرة.

الشروح مثل @مكون يجعل الأمور أسوأ.فإنه يرسم المطورين لجعل الأشياء قابلة للتغيير ، تبعيات لا يمكن أن يكون النهائي بعد الآن ، نظرا الافتراضي منشئات تحتاج إلى أن تكون المقدمة.تبعيات تحتاج إلى أن تكون إما حقن خلال العام اضع أو غير المنضبط من خلال @Autowired.[أسوأ حقن التبعية للخطر مع فئات إنشاء تبعيات, أنا لا تزال ترى هذا في المكتوبة حديثا رمز!].من قبل غير المنضبط أعني في النظم الكبيرة ، عندما المتعددة التطبيقات (أو الأطفال) من نوع متاحة ، فإنه يحصل على أكثر من ذلك بكثير المعنية على فهم أي من تطبيقات تم @Autowired ، التعقيد الذي يجعل من التحقيق في الخلل أصعب بكثير.وهذا يعني أيضا أنه من المفترض أن يكون لديك ملف تعريف بيئة اختبار آخر أجل إنتاج, الإنتاج الخاص البق لن يحدث إلا عندما يؤلم أكثر في الإنتاج بدلا من أن تكون قادرا على اكتشاف الخلل في بيئة اختبار ، أو حتى أفضل ، في وقت الترجمة!

أنا التمسك الوسط حيث أعلن بلدي فئة التكوين(es), (java الربيع التكوين باستخدام @التكوين)

أعلن كل ما عندي حبوب صراحة في تكوين فئة(es).أنا فقط استخدام @Autowired في تكوين فئة(es) ، والغرض من ذلك هو الحد من الاعتماد على الربيع إلى تكوين فئة(es)

@في التكوين الموجودة في حزمة معينة ، هذا هو المكان الوحيد حيث الربيع الفحص يعمل.(أن يسرع في وقت بدء إلى حد كبير في المشاريع الكبيرة)

أنا نسعى جاهدين لجعل كل دروسي ثابتة ، وخاصة كائن البيانات ، JPA, السبات الربيع ، وكذلك العديد من التسلسل المكتبات يبدو إلى تقويض هذا.أنا الابتعاد عن أي شيء يجبرني على تقديم واضعي أو إزالة النهائي الكلمة من الإعلان الملكية.

والحد من احتمالات تغيير الأشياء بعد إنشاء يقلل كثيرا من الخلل في نظام كبير وكذلك يقلل من الوقت للعثور على خطأ عندما وجد.

ويبدو أيضا أنه يجبر المطور على أفضل تصميم التفاعل بين أجزاء مختلفة من النظام.المشاكل والأخطاء تصبح أكثر وأكثر تجميع الأخطاء أن يقلل من إهدار الوقت وتحسين الإنتاجية.

وهنا بعض من الخبرة
الايجابيات

  • يجعل من الأسهل إلى تكوين لأننا يمكن أن مجرد استخدام @Autowire الشرح
  • لا تريد استخدام أساليب اضع لذا الدرجة سوف تكون أكثر نظافة

سلبيات

  • بإحكام الزوجين إلى ملف xml على الرغم من أننا استخدام دي
  • من الصعب العثور على تنفيذ (ولكن إذا كنت الخاص بك باستخدام جيدة ايديس مثل intellij متأكد من أنك يمكن التخلص من هذا)

من تجربتي الشخصية لم أستخدم @AutoWire الشرح كثيرا ولكن في حالات الاختبار.

أنا حقا أحب الكتابة مع الشروح ، بدلا من XML.وفقا الربيع دليل آخر إصدارات, XML و الشرح تحقيق نفس النتيجة.

هذه هي قائمتي

برو:

  • فائدة إزالة الخط من xml
  • تبسيط تصحيح التعليمات البرمجية:عند فتح فئة ، يمكنك قراءة ما لديك في الصف
  • أكثر سرعة و المشروع مع 400 أو أكثر من خط XML للقراءة ؟

سلبيات:

  • ليس جافا القياسية التنفيذ ، ولكن يمكنك التبديل إلى استخدام @حقن الذي هو جافا Api القياسية ، حتى الفول يظل Pojo
  • لا يمكنك ببساطة استخدام في كل مكان ، db اتصال e جرا ، ولكن هذا فقط رأي, أنا أفضل مكان قراءة كل تكوين.

بالنسبة لفهمي @Autowired هو أفضل لاستخدام حين الرجوع إلى واجهة إشارة واستخدام تجاوز funtions ، ولكن أجد إلا هذه المسألة هو أنه في بعض الأحيان تعيين إلى null في وقت التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top