ในคอนเทนเนอร์ฤดูใบไม้ผลินอกเหนือจากการสร้างการพึ่งพาผ่าน <ref> แล้วยังมีความสัมพันธ์พิเศษระหว่างถั่วสองตัว
1 มรดก
ในหลักการการเขียนโปรแกรมเชิงวัตถุเมื่อหลายคลาสมีวิธีการและคุณสมบัติเดียวกันคลาสแม่สามารถนำมาใช้เพื่อกำจัดรหัสที่ซ้ำกัน ในคอนเทนเนอร์ฤดูใบไม้ผลิหากถั่วหลายตัวมีข้อมูลการกำหนดค่าเท่ากันเราสามารถกำหนดถั่วแม่เพื่อให้ถั่วลูกจะสืบทอดข้อมูลการกำหนดค่าของถั่วแม่โดยอัตโนมัติ
<!-Bean Parent-> <Bean ID = "AbstractBook" P: name = "Veil" Abstract = "true"> </epean> <!-ถั่วเด็ก-> <bean id = "book1" p: press = "Chongqing Publishing House" Parent "PREPTUAD"
โดยทั่วไปฟังก์ชั่นของถั่วแม่คือการทำให้การกำหนดค่าของถั่วเด็กง่ายขึ้นดังนั้นจึงถูกตั้งค่าเป็นคลาสนามธรรม (Abstract = "true"); หากถั่วแม่ไม่ได้ตั้งค่าเป็นคลาสนามธรรมที่นี่คอนเทนเนอร์สปริงจะยกตัวอย่างถั่วแม่
2 พึ่งพาอาศัยกันก่อน
โดยทั่วไปแล้ว <ref> ใช้เพื่อสร้างการพึ่งพาระหว่างถั่ว คอนเทนเนอร์ฤดูใบไม้ผลิมีหน้าที่จัดการความสัมพันธ์เหล่านี้ เมื่ออินสแตนซ์ถั่วคอนเทนเนอร์ทำให้มั่นใจได้ว่าถั่วทั้งหมดขึ้นอยู่กับถั่วได้เสร็จสิ้นการเริ่มต้นงาน
แต่ในบางกรณีการพึ่งพาระหว่างถั่วนั้นไม่ชัดเจน
สมมติว่าในสถานการณ์นี้ระบบจะตั้งค่าพารามิเตอร์ระบบบางอย่าง (เช่นระยะเวลาความถูกต้องของรหัสผ่านไม่ว่าจะเปิดใช้งานการตรวจสอบ ฯลฯ ) และพารามิเตอร์การเริ่มต้นเหล่านี้ใช้เพื่อควบคุมตรรกะการทำงานของระบบ เราใช้คลาสการตั้งค่าเพื่อแสดงพารามิเตอร์เหล่านี้:
การตั้งค่าคลาสสาธารณะ { / ** * เวลาหมดอายุรหัสผ่าน (หน่วย: วัน) * / สาธารณะคงที่ int pass_timeout = 30; / *** ว่าจะเปิดใช้งานการตรวจสอบ*/ บูลีนคงที่สาธารณะ is_monitor = false;}ที่นี่เราตั้งค่าเริ่มต้นสำหรับพารามิเตอร์เหล่านี้ ระบบยังมีแบ็กเอนด์ผู้ดูแลระบบซึ่งผู้ดูแลระบบสามารถปรับพารามิเตอร์ระบบเหล่านี้และบันทึกลงในฐานข้อมูล ดังนั้นเมื่อแอปพลิเคชันเริ่มต้นพารามิเตอร์ระบบเหล่านี้จำเป็นต้องโหลดจากฐานข้อมูล:
ระบบชั้นเรียนสาธารณะ {ระบบสาธารณะ () {init (); } /*** การเริ่มต้น* /โมฆะส่วนตัว init () {// สมมติว่าค่าเหล่านี้มาจากการตั้งค่าฐานข้อมูล Pass_timeOut = 20; settings.is_monitor = true; -ระบบมีตัวจัดการหมดอายุรหัสผ่านซึ่งจะสร้างงานที่กำหนดเวลาเพื่อตรวจจับว่ารหัสผ่านจะหมดอายุตาม [จำนวนวันที่รหัสผ่านหมดอายุ] ในพารามิเตอร์ระบบ:
PassManager ชั้นเรียนสาธารณะ {Int หมดเวลา; Passmanager () {timeout = settings.pass_timeout; Timertask (); } / *** งานที่กำหนดเวลาเพื่อตรวจจับว่ารหัสผ่านหมดอายุ* / โมฆะส่วนตัว timertask () {} public int getTimeout () {ส่งคืนหมดเวลา; -แม้ว่า PassManager จะไม่พึ่งพาการตั้งค่าโดยตรง แต่มีเหตุผล แต่ PassManager คาดว่าระบบจะโหลดพารามิเตอร์ระบบที่เริ่มต้นก่อนที่จะเริ่ม
ในฤดูใบไม้ผลิคุณสามารถระบุถั่วก่อนการพึ่งพาได้อย่างชัดเจนของถั่วผ่านคุณสมบัติขึ้นอยู่กับคุณสมบัติเพื่อให้แน่ใจว่าถั่วก่อนการพึ่งพาของถั่วนี้ได้รับการโหลดก่อนการสร้างอินสแตนซ์
<bean id = "system"/> <bean id = "manager" ขึ้นอยู่กับ = "System"/>>>> >>
หากคำนำหน้าขึ้นอยู่กับถั่วหลายตัวชื่อถั่วสามารถกำหนดค่าได้โดยเครื่องหมายจุลภาคช่องว่างหรือเครื่องหมายอัฒภาค
3 รหัสอ้างอิง
สมมติว่าถั่วจำเป็นต้องอ้างถึงค่า ID (ชื่อถั่ว) ของถั่วตัวอื่น โดยทั่วไปจะใช้เพื่อให้ได้ถั่วอีกผ่านวิธี getbean (Beanname) ในถั่วในระหว่างการรันไทม์
สามารถกำหนดค่าได้เช่นนี้:
<bean id = "Author"/> <bean id = "Book" P: AuthorId = "Author"/>>>>> >>
เพิ่มแอตทริบิวต์ผู้เขียนในหนังสือ:
/** * ผู้แต่ง Bean ID */Private String Authorid;
แม้ว่ามันจะสามารถตั้งค่าในรูปแบบที่แท้จริงนี้ แต่ก็ไม่มีความสัมพันธ์อ้างอิงที่แท้จริงระหว่างทั้งสอง ดังนั้นข้อผิดพลาดการกำหนดค่าจะพบได้ก็ต่อเมื่อมีการเรียกการโทรเฉพาะ
สปริงมีแท็ก <idref> Element ซึ่งอ้างอิงชื่อของถั่วตัวอื่นผ่าน <idref> ด้วยวิธีนี้เมื่อคอนเทนเนอร์เริ่มต้นความถูกต้องของความสัมพันธ์อ้างอิงจะถูกตรวจสอบและข้อมูลการกำหนดค่าที่ไม่ถูกต้องสามารถพบได้ล่วงหน้า
<bean id = "Author10"/> <bean id = "book10"> <property name = "AuthorId"> <iDref bean = "Author10"/> </property> </ebean>
หากเกิดข้อผิดพลาดการกำหนดค่าจะมีการโยน beandefinitionstoreexception เมื่อคอนเทนเนอร์สปริงเริ่มต้นและตัวแยกวิเคราะห์ XML ของ IDE จะพบข้อผิดพลาดอ้างอิงล่วงหน้าดังนั้นจึงแนะนำให้ใช้แท็กองค์ประกอบ <idref> เพื่ออ้างอิงรหัส
สรุป
ข้างต้นเป็นความสัมพันธ์พิเศษระหว่างถั่วฤดูใบไม้ผลิที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉัน บรรณาธิการจะตอบกลับคุณทันเวลา!