عند كتابة تنفيذ الواجهة ، في بعض الأحيان توجد فئات تنفيذ متعددة. تقدم هذه المقالة تحديد فئة تنفيذ محددة من خلال تمرير سلسلة عند الاتصال.
1. فئات الواجهة والنفايات:
// واجهة الواجهة العامة serviceInterface {public void method () ؛} // فئتان محددتان للتنفيذ service ("aservice") aserviceImpl تنفذ serviceInterface {Override public void method () {system.out.println ("is a a") ؛ } Override Public String ToString () {return "a" ؛ }} service ("bservice") الفئة العامة bserviceImpl تنفذ serviceInterface {Override public void method () {system.out.println ("INS IS B") ؛ } Override public string toString () {return "b" ؛ }}تتم إعادة كتابة طريقة TOSTRING () في فئة التنفيذ ، ويمكنك تخصيص السلسلة. عندما تقوم بتمرير السلسلة المحددة عند الاتصال ، يمكنك الحصول على الفول المقابل.
2. سجل الكتابة:
service ("register") سجل الفئة العامة يطرف initializingBean ، ApplicationContextAware {Private Map <String ، ServiceInterface> serviceImplMap = new HashMap <> () ؛ application applicationcontext applicationContext ؛ // احصل على سياق springoverride public void setapplicationContext (ApplicationContext ApplicationContext) يلقي beansexception {this.applicationContext = ApplicationContext ؛ } // احصل على جميع الفاصوليا من فئة تنفيذ الواجهة ووضعها في الخريطة وفقًا للقواعد التي قمت بتعيينها ، Override public void بعد propertiesset () يلقي الاستثناء {map <string ، serviceInterface> beanmap = applicationContext.getBeansofType (serviceInterface.class) ؛ // الكود التالي هو وضع الفول في الخريطة وفقًا للقواعد التي حددتها ، وقاعدتي هنا هي المفتاح: service.toString () ؛ القيمة: Bean // عند الاتصال ، يمكن للسلسلة المحددة للمعلمة التي تم تمريرها إلى Service.ToString () الحصول على الفاصوليا المقابلة // لا يمكنك أيضًا القيام بالعمليات التالية هنا ، فقط استخدم BeanMAP مباشرة. عند الاتصال ، يتم تمرير اسم الفول (serviceInterface) لـ (serviceInterface serviceImpl: beanmap.values ()) {serviceImplMap.put (serviceImpl.ToString () ، serviceImpl) ؛ }} serviceInterface getServiceImpl (اسم السلسلة) {return serviceImplMap.get (name) ؛ }} 3. فئة الاختبار:
ResourCeregister سجل ؛ testpublic void testService () {serviceInterface service = register.getServiceImpl ("a") ؛ service.method () ؛ serviceInterface Service2 = register.getServiceImpl ("B") ؛ service2.method () ؛}تظهر نتائج التشغيل في الشكل:
ملاحظة:
بعد تحميل الربيع ، احصل على طريقة لتطبيق Context:
بتطبيق ApplicationContextAware Interface Bean ، يمكن الحصول على ApplicationContext من Spring أثناء عملية تحميل الفول. هذا مهم بشكل خاص. ApplicationContext هو سياق تطبيق الربيع. يمكن الحصول على عدد كبير من محتوى حاوية الربيع والمعلومات بما في ذلك أي حبة من ApplicationContext.
component ("InformerRegistry") فئة نهائية عامة تنفذ applicationContextAware {private applicationContext ApplicationContext ؛ Override public void setapplicationContext (ApplicationContext ApplicationContext) يلقي beansexception {this.applicationContext = ApplicationContext ؛ }} لواجهة تمديد الفول شائعة الاستخدام ، يرجى الرجوع إلى: http://www.cnblogs.com/xrq730/p/5721366.html
يلاحظ:
يتم بدء الربيع عند استخدام الطريقة التالية للحصول على سياق الربيع. إذا كتبت الطريقة التالية عدة مرات ، فسيتم تشغيل حاويات Spring متعددة لنسخ الكود على النحو التالي: ApplicationContext CTX = جديد ClassPathxMlAppLicationContext ("classpath: meta-inf/spring/*. xml") ؛
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.