เมื่อเขียนการใช้งานส่วนต่อประสานบางครั้งมีคลาสการใช้งานหลายคลาส บทความนี้แนะนำการระบุคลาสการใช้งานที่เฉพาะเจาะจงโดยผ่านสตริงเมื่อโทร
1. คลาสอินเตอร์เฟสและการใช้งาน:
// อินเทอร์เฟซอินเตอร์เฟสสาธารณะ ServiceInterface {โมฆะสาธารณะเมธอด ();} // สองคลาสการใช้งานที่เฉพาะเจาะจง @Service ("aservice") คลาสสาธารณะ aserviceimpl ใช้ ServiceInterface {@Override public Void Method () {System.out.println ( } @Override สตริงสาธารณะ toString () {return "a"; }} @Service ("bService") คลาสสาธารณะ BSERVICICEIMPL ใช้ ServiceInterface {@Override โมฆะสาธารณะวิธีการ () {System.out.println ("INTIM คือ B"); } @Override สตริงสาธารณะ toString () {return "b"; -วิธี TOSTRING () ถูกเขียนใหม่ในคลาสการใช้งานและคุณสามารถปรับแต่งสตริงได้ เมื่อคุณผ่านสตริงที่ระบุเมื่อเรียกคุณจะได้รับถั่วที่สอดคล้องกัน
2. การเขียนลงทะเบียน:
@Service ("ลงทะเบียน") การลงทะเบียนคลาสสาธารณะใช้การเริ่มต้นเบียน, ApplicationContextAware {แผนที่ส่วนตัว <สตริง, ServiceInterface> ServiceImplMap = ใหม่ HASHMAP <> (); ApplicationContext Private ApplicationContext; // รับบริบทของสปริง @Override โมฆะสาธารณะ setApplicationContext (ApplicationContext ApplicationContext) พ่น beansexception {this.applicationContext = ApplicationContext; } // รับถั่วทั้งหมดของคลาสการใช้งานอินเตอร์เฟสและใส่ลงในแผนที่ตามกฎที่คุณตั้งไว้ @Override โมฆะสาธารณะ AfterPropertIesset () โยนข้อยกเว้น {แผนที่ <สตริง, serviceInterface> beanMap = ApplicationContext.getBeansofType (serviceInterface.class); // รหัสต่อไปนี้คือการใส่ถั่วลงในแผนที่ตามกฎที่คุณตั้งไว้และกฎของฉันที่นี่คือคีย์: service.toString (); ค่า: Bean // เมื่อโทรสตริงเฉพาะของพารามิเตอร์ที่ส่งผ่านไปยัง Service.toString () สามารถรับถั่วที่สอดคล้องกัน // คุณไม่สามารถดำเนินการต่อไปนี้ได้ที่นี่เพียงแค่ใช้ beanmap โดยตรง เมื่อโทรชื่อของถั่วจะถูกส่ง (ServiceInterface) สำหรับ (ServiceInterface ServiceImpl: BeanMap.Values ()) {ServiceImplMap.put (ServiceImpl.toString (), ServiceImpl); }} Public ServiceInterface getServiceimpl (ชื่อสตริง) {ส่งคืน ServiceImplMap.get (ชื่อ); - 3. คลาสทดสอบ:
@ResourCeregister Register; @TestPublic Void TestService () {ServiceInterface Service = register.getServiceImpl ("A"); Service.method (); ServiceInterface Service2 = register.getServiceImpl ("B"); Service2.method ();}ผลการดำเนินการแสดงในรูป:
คำพูด:
หลังจากการโหลดฤดูใบไม้ผลิให้ใช้วิธีการใช้งาน to InpliNTEXT:
การใช้ถั่วอินเตอร์เฟส ApplicationContextAware สามารถรับ ApplicationContext ของ Spring ได้ในระหว่างกระบวนการโหลดถั่ว นี่เป็นสิ่งสำคัญอย่างยิ่ง ApplicationContext เป็นบริบทแอปพลิเคชันฤดูใบไม้ผลิ เนื้อหาและข้อมูลของคอนเทนเนอร์สปริงจำนวนมากรวมถึงถั่วใด ๆ สามารถรับได้จาก ApplicationContext
@Component ("InformerRegistry") Public Final Class Inforregistry ใช้ ApplicationContextAware {ApplicationContext Private ApplicationContext; @Override โมฆะสาธารณะ setApplicationContext (ApplicationContext ApplicationContext) พ่น beansexception {this.applicationContext = ApplicationContext; - สำหรับอินเทอร์เฟซขยายถั่วที่ใช้กันทั่วไปของฤดูใบไม้ผลิโปรดดูที่: http://www.cnblogs.com/xrq730/p/5721366.html
สังเกต:
ฤดูใบไม้ผลิเริ่มต้นเมื่อคุณใช้วิธีการต่อไปนี้เพื่อรับบริบทสปริง หากคุณเขียนวิธีการต่อไปนี้หลายครั้งคอนเทนเนอร์สปริงหลายตัวจะเริ่มคัดลอกรหัสดังนี้: ApplicationContext CTX = ใหม่ classPathxMlApplicationContext ("classPath: meta-inf/spring/*. xml");
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น