مقدمة
في تطوير Java العادي ، يحتاج المبرمجون إلى الاعتماد على فصول أخرى في فئة معينة ، لذلك يستخدمون عادةً مثيلات فئة new ثم استدعاء. المشكلة في هذا التطور هي أن مثيلات الطبقة new ليست سهلة الإدارة. يقترح Spring فكرة حقن التبعية ، أي أن فئات التبعية لا يتم إنشاء مثيل لها من قبل المبرمجين ، ولكن تساعدنا new مثيلات من خلال حاويات الزنبرك وحقن مثيلات في الفصل الذي يحتاج إلى الكائن. مصطلح آخر لحقن التبعية هو "انعكاس التحكم". الفهم المشترك هو: عادةً ما نكون مثيلًا new ، والتحكم في هذه الحالة هو المبرمج الخاص بنا ، وانعكاس التحكم يعني أن عمل المثيل new لم ينجزه المبرمجون الأمريكيون ولكن يتم تسليمه إلى حاوية الربيع.
هناك أربع طرق لحقن التبعية في الربيع
1. حقن ضبط (عادة ما يسمى أيضًا حقن السمة)
2. حقن المنشئ
3. حقن الواجهة (هذا غير مستخدم بشكل أساسي الآن)
4. حقن التعليقات التوضيحية (@autowire)
فيما يلي مثال على استخدام حقن طريقة المجموعة ، حقن المنشئ ، وحقن التعليقات التوضيحية.
1. مجموعة حقن الطريقة (حقن السمة)
userdao.java
الفئة العامة userdao {public void insertuser (المستخدم) {// منطق محدد}}userService.java
الواجهة العامة orterservice {void insertuser (مستخدم المستخدم) ؛}userviceiMpl.java
فئة public userviceImpl تنفذ المستخدمين {private userDao userDao ؛ public void setuserdao (userDao userDao) {this.userdao = userDao ؛ } public void insertuser (user user) {userDao.insert (user) ؛ }}ملف تكوين الربيع
<؟ Xmlns: Context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd <!-حذف بعض كتابة التكوين غير المرتبطة-> <bean id = "userDao"> </bean> <bean id = "userservice"> <property name = "userdao" ref = "userdao"
يمكن أن يضخ ما سبق حقن userDao في userviceImpl
2. حقن المنشئ
user.java
مستخدم الفئة العامة {// for Simplicity ، اكتب اثنين من سمات السلسلة الخاصة ؛ عصر عدد صحيح خاص ؛ // حذف طريقة getter/setter حول الاسم ، المستخدم العام للعمر (اسم السلسلة ، int age) {this.name = name ؛ this.age = العمر ؛ }}استخدم الآن ملف تكوين الربيع لحقن كائن المستخدم
<؟ Xmlns: Context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd <!-حذف بعض كتابة التكوين غير المرتبطة-> <bean id = "user"> <!-يبدأ التراجع من معلمات المنشئ من 0 (تجنب العديد من المنشآت التي لها نفس عدد المعلمات)-> <constructor-arg type = "java.lang.tring" index = "0" value = zhangsan "/> value = "20> </ban> </bans>
يمكن أعلاه حقن قيم الخصائص في كائن المستخدم. بالطبع ، إذا كنت ترغب في ضخ المثال باستخدام طريقة SET ، فهو في الواقع هو نفسه. من الضروري أن يكون لديك مُنشئ في UserServiceImpl ، والمعلمات الرسمية هي userDao ، لذلك ليست هناك حاجة لطريقة setter .
ثم يجب تغيير كتابة ملف تكوين الربيع إلى هذا
<؟ Xmlns: Context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd <!-حذف بعض كتابة التكوين غير المرتبطة-> <bean id = "userDao"> </bou> <bean id = "userverservice> <!-يبدأ المفرد من معلمات المنشئ من 0 (تجنب العديد من الحالات التي لها نفس العدد من المعلمات)-> <منشئ arg =" 0 "urs =" userdao "
يمكن أن يحقق هذا أيضًا التأثير الذي حققه حقن طريقة المجموعة أعلاه
3. حقن التعليقات التوضيحية
لم أحاول أبدًا ما إذا كان يمكن @Autowire بنجاح دون إضافة @Component,@Service,@Controller ، وما إلى ذلك إلى هذه الفئات. ومع ذلك ، يوصى بإضافة التعليقات التوضيحية المقابلة إلى المستوى المقابل. في المثال التالي ، ينتمي UserDao إلى طبقة Modul. في الربيع ، يمكنك استخدام التعليق التوضيحي @Component .
userdao.java
componentpublic class userdao {public void insertuser (user user) {// logic refic}}userService.java
الواجهة العامة orterservice {void insertuser (مستخدم المستخدم) ؛}userviceiMpl.java
. public void insertuser (user user) {userDao.insert (user) ؛ }}ملف التكوين المقابل لفريق الربيع
<؟ Xmlns: Context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd <!-حذف بعض كتابة التكوين غير المرتبطة-> <!-* يعني مسح جميع الحزم. في التطوير الفعلي ، يمكنك المسح الضوئي استنادًا إلى الحزم التي تتضمن مكونات التعليقات التوضيحية-> <السياق: مكون المسح الضوئي package = "*"> <!-قم بتشغيل المسح الضوئي للمكون-> </سياق: component-scan> <contex id = "userService"/> </bans>
ومع ذلك ، أثناء عملية التطوير ، يتم تمكين حقن طريقة SET ويتم تمكين حقن التعليقات التوضيحية ، وسيختار Spring أولاً حقن مجموعة ، لذلك لا ينسى توفير طريقة المجموعة المقابلة ، وإلا سيفشل.
من خلال المقارنة ، يكون حقن التعليقات التوضيحية أكثر ملاءمة من الحقن الأخرى ، ويتم كتابة ملفات رمز وتكوين أقل. يوصى باستخدام حقن التعليقات التوضيحية أثناء عملية التطوير.
لخص
ما سبق هو مقدمة كاملة لعدة طرق لحقن التبعية في الربيع. آمل أن يساعدك في دراستك أو عملك. إذا كان لديك أي أسئلة ، فيمكنك أيضًا ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.