ตู้คอนเทนเนอร์พ่อแม่-ลูกฤดูใบไม้ผลิ
คอนเทนเนอร์บริบททั่วไปของฤดูใบไม้ผลิสามารถแบ่งออกเป็นพ่อและลูกชายภาชนะบรรจุพ่อแม่และภาชนะบรรจุเด็ก ** คอนเทนเนอร์ของผู้ปกครองสามารถมองเห็นได้สำหรับภาชนะเด็กและภาชนะบรรจุเด็กไม่สามารถมองเห็นได้สำหรับคอนเทนเนอร์หลัก **
สำหรับ MVC ฤดูใบไม้ผลิแบบดั้งเดิมคอนเทนเนอร์ MVC Spring เป็นคอนเทนเนอร์เด็กนั่นคือคอนเทนเนอร์ที่สอดคล้องกับ ServletDispatcher เป็นคอนเทนเนอร์เด็กและการกำหนดค่าใน web.xml เป็นคอนเทนเนอร์หลักผ่านคุณสมบัติ contextconfiglocation ของ conextloaderListener
ใช้สถานการณ์ของตู้คอนเทนเนอร์พ่อและลูกชาย
วัตถุประสงค์หลักของภาชนะพ่อลูกคือการแยกบริบท พิจารณาหนึ่งในสถานการณ์ต่อไปนี้
Project-API จำเป็นต้องตกแต่งวิธีการบางอย่างในบริการโครงการและตกแต่งพวกเขาเช่นการตกแต่งลูกค้าบริการ ชั้นเรียนที่ได้รับการตกแต่งคือ CachedCustomerservice ดังนั้นตอนนี้ Project-API มีบริการลูกค้าสองรายหนึ่งคือบริการลูกค้าจากบริการโครงการและอื่น ๆ คือ CachedCustomerservice ในเวลานี้หากไฟล์การกำหนดค่าทั้งหมดของโครงการ Project-API ถูกโหลดผ่านบริบทปัญหาจะเกิดขึ้นอย่างหลีกเลี่ยงไม่ได้ (การปฏิบัติตามปกติคือการใช้แท็กนำเข้าเพื่อนำเข้าทั้งหมด) เพราะบริการ Payservice ในโครงการถูกฉีดเข้าไปในบริการลูกค้าผ่านมาตรฐาน @Resource คล้ายกับต่อไปนี้
@SerivcePublic Class Payservice {@ResourcePrivate ลูกค้าบริการ cusservice;}สารละลาย
ในเวลานี้เนื่องจากบริบทจะฉีดคุณสมบัติของลูกค้าบริการจึงพบบริการศุลกากรสองแห่ง ไม่สามารถตีความได้ว่าบริการใดที่จะฉีด
แน่นอนว่าบางคนจะเปลี่ยนทรัพย์สินทรัพยากรของ Payservice และระบุว่าจะฉีดใด อย่างไรก็ตามหาก Project-service.jar เป็นไลบรารีของบุคคลที่สามการเปลี่ยนรหัสจะไม่สามารถทำได้เว้นแต่จะได้รับซอร์สโค้ด
ในเวลานี้ปัญหานี้สามารถแก้ไขได้ผ่านคอนเทนเนอร์แม่ลูก
ใส่บริการโครงการในภาชนะแม่และถั่วโครงการ API ทั้งหมดจะถูกโหลดในภาชนะบรรจุเด็ก
สมมติว่าไฟล์การกำหนดค่าบริบทของ Project-API คือ Project-API.XML วิธีการใช้งานมีดังนี้
1. กำหนด project total.xml
<bean id = "serviceContext"> <constructor-Arg> <value> classpath: Project-service.xml </alue> </constructor-Arg> </ebean> <bean id = "apicontext"> <constructor-Arg> bean = "serviceContext"/> </constructor-Arg> </ebean>
2. ในการกำหนดค่าบริบทของ web.xml ต่อไปนี้คือ
<บริบท-พารารัม> <param-name> contextconfiglocation </param-name> <param-value> classpath*: project-total.xml </param-value> </context-param> <sistener> <Sistener-class> org.springframework.web.context.contextloaderlistener </listener-class> </listener>
ServiceContext เป็นคอนเทนเนอร์พาเรนต์และ apicontext เป็นคอนเทนเนอร์เด็กเพื่อให้ serviceContext ไม่สามารถดู apicontext และ apicontext สามารถเห็นผลของ serviceContext
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น