ก่อนที่จะอ่านบทความนี้คุณสามารถอ้างถึงบทความ " ความเข้าใจง่ายๆของ IOC และ AOP และตัวอย่างรหัส " ของฤดูใบไม้ผลิ เพื่อเรียนรู้เกี่ยวกับ IOC และ AOP ในฤดูใบไม้ผลิ มาที่หัวข้อกันเถอะ บทความนี้แนะนำวิธีการกำหนดและโหลดถั่วจาวาในฤดูใบไม้ผลิ
สถานการณ์ทางธุรกิจ
นอกจากนี้ยังเป็นตัวอย่างของคนขับรถ ขั้นแรกให้กำหนดอินเทอร์เฟซรถยนต์และใช้งาน BENZ และ BMW สองตัวจากนั้นกำหนดคลาสบุคคลซึ่งขึ้นอยู่กับอินเทอร์เฟซรถยนต์
รถยนต์อินเทอร์เฟซสาธารณะ {void go ();} ชั้นเรียนสาธารณะ Benz ใช้รถยนต์ {โมฆะสาธารณะไป () {system.out.println ("Benz Go ... "); - คลาสสาธารณะ BMW ใช้รถยนต์ {โมฆะสาธารณะไป () {system.out.println ("BMW GO ... "); - บุคคลชั้นเรียนสาธารณะ {ชื่อสตริง = ""; รถรถยนต์ = null; รถสาธารณะ getCar () {รถกลับ; } โมฆะสาธารณะ setcar (รถยนต์รถยนต์) {this.car = car; } บุคคลสาธารณะ (ชื่อสตริง) {this.name = name; } ไดรฟ์โมฆะสาธารณะ () {system.out.println (ชื่อ+"กำลังขับรถ ... "); car.go (); -ในชั้นเรียนบุคคลเราจะเห็นได้ว่าวัตถุรถยนต์เป็นวัตถุที่ต้องพึ่งพาของคลาสนี้และจำเป็นต้องฉีดเข้าไปในคลาสบุคคลผ่านวิธีตัวสร้าง รหัสข้างต้นยังคงไม่มีเงาของฤดูใบไม้ผลิ มาดูกันว่าฤดูใบไม้ผลิฉีดมันอย่างไร
เพิ่มการพึ่งพาสปริง
ทุกวันนี้หลายโครงการมีผลบังคับใช้กับ Maven เพื่อจัดการการพึ่งพาและสิ่งนี้เป็นจริงสำหรับโครงการนี้ ฉันจะเพิ่มโหนดการพึ่งพาเป็น pom.xml
<การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-core </artifactid> <sersion> 3.2.6.release </version> </predency> <การพึ่งพา> <roupid> org.springframework <Sersion> 3.2.6.Release </เวอร์ชัน> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-Context </artifactid> <Sersion> 3.2.6.Release </เวอร์ชัน> </การพึ่งพาการพึ่งพา <ArtIfactId> Spring-Context </artifactId> <persion> 3.2.6.release </เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <roupId> org.springframework </groupId> <ArtIfactId> Spring-Context-Support </artifactid>
ใส่โหนดการพึ่งพาเหล่านี้ลงในโหนดการพึ่งพาของไฟล์ pom.xml และ eclipse จะดาวน์โหลดแพ็คเกจที่เกี่ยวข้องไปยังตำแหน่งเริ่มต้นโดยอัตโนมัติ
กำหนดและประกอบถั่วด้วยตนเอง
สร้างไฟล์ XML ใหม่ชื่อ bean.xml ในไดเรกทอรีรากของโครงการด้วยเนื้อหาต่อไปนี้:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype beans public "-// spring // dtd bean // en" "http://www.springframework.org/dtd/spring-beans.dtd" value = "tom" /> <property name = "car" ref = "car" /> </ebean> </ebeans>
ไฟล์ XML ด้านบนแรกกำหนดถั่วที่มี ID เป็นรถยนต์และถั่วที่มี ID เป็น TOM รถยนต์เป็นการพึ่งพาของ TOM และรวมตัวกันเป็นแอตทริบิวต์รถยนต์ของ TOM ผ่าน <property name = "Car" ref = "Car" />
พฤติกรรมของการสร้างความสัมพันธ์ร่วมกันระหว่างวัตถุแอปพลิเคชันเรียกว่าการเดินสายซึ่งเป็นสาระสำคัญของการพึ่งพาการฉีดวัตถุ
ต่อไปเราจะสร้างอินสแตนซ์วัตถุบริบทของแอปพลิเคชันในวิธีหลักและรับโหนด TOM ในถั่ว
แอพคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {applicationcontext context = ใหม่ classPathxMlApplicationContext ("bean.xml"); person tom = (บุคคล) บริบท getBean ("tom"); tom.drive (); -เรียกใช้โปรแกรมและผลลัพธ์ผลลัพธ์คือ:
ทอมกำลังขับรถ ... BMW GO ...
แอสเซมบลีอัตโนมัติ
ทำซ้ำอีกครั้งพฤติกรรมของการสร้างความสัมพันธ์ร่วมกันระหว่างวัตถุแอปพลิเคชันเรียกว่าการเดินสายแทนที่จะเป็นกระบวนการของการสร้างอินสแตนซ์วัตถุ ในไฟล์ XML ข้างต้นฉันได้รวบรวมวัตถุการพึ่งพาโดย <property name = "Car" ref = "Car" /> แต่ด้วยการพัฒนาอย่างต่อเนื่องของแอปพลิเคชันไฟล์การกำหนดค่า XML จะซับซ้อนมากขึ้นเรื่อย ๆ วิธีที่เราเชื่อมโยงถั่วกับรถยนต์ ID ผ่าน ref = "Car" ได้เริ่มล่าช้า ต่อไปฉันจะแนะนำวิธีที่สปริงใช้ถั่วแอสเซมบลีอัตโนมัติ
ประเภทของแอสเซมบลีอัตโนมัติ
ฤดูใบไม้ผลิมีกลยุทธ์การชุมนุมสี่แบบ เพื่อลดความซับซ้อนของบทความนี้ฉันจะแนะนำกลยุทธ์ที่ใช้กันทั่วไปสองวิธีคือวิธีการ byname และวิธี bytype ตามชื่อหมายถึงวิธี byname คือการดูว่าชื่อของแอตทริบิวต์และ id ของถั่วเหมือนกันหรือไม่ ในตัวอย่างนี้คลาสบุคคลมีคุณลักษณะที่เรียกว่า Car หากแอตทริบิวต์คลาสหรือการเปลี่ยนแปลงถูกตั้งค่าเป็นแอสเซมบลีอัตโนมัติและนโยบายการประกอบเป็นชื่อโดยใช้ชื่อสปริงจะมองหาถั่วที่มีรถ ID (ต้องมีชื่อเดียวกัน) วิธี Bytype คือการเปรียบเทียบว่าประเภทนั้นเหมือนกันหรือไม่ ในตัวอย่างนี้หากแอตทริบิวต์รถยนต์ของคลาสบุคคลหรือคลาสบุคคลถูกตั้งค่าให้ประกอบอัตโนมัติและนโยบายการประกอบเป็น bytype เนื่องจากแอตทริบิวต์รถยนต์เป็นประเภทรถยนต์ฤดูใบไม้ผลิจะมองหาถั่วประเภทรถยนต์หรือคลาสย่อยเมื่อประกอบอัตโนมัติ
ใช้ XML เพื่อใช้งานแอสเซมบลีอัตโนมัติ
ต่อไปฉันจะแก้ไขรหัสและใช้วิธีการกำหนดค่า XML เพื่อให้ได้แอสเซมบลีอัตโนมัติ
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype beans สาธารณะ "-// spring // dtd bean // en" "http://www.springframework.org/dtd/spring-beans.dtd" <constructor-arg value = "tom"/> </ebean> </ebeans>
คลาสบุคคลไม่จำเป็นต้องมีการดัดแปลงใด ๆ
ก่อนอื่นฉันลบ <PropertyName = "Car" ref = "Car"/>> รหัสบรรทัดเพราะมันเป็นวิธีด้วยตนเอง จากนั้นฉันเพิ่มอสังหาริมทรัพย์ autoWire = "byname" ลงในถั่วด้วย id และตั้งค่าเป็นตัวรวบรวมการพึ่งพาตามชื่อโดยอัตโนมัติ เมื่อได้รับวัตถุบุคคลชื่อทรัพย์สินทั้งหมดของบุคคลมีความหมายพิเศษ สปริงตรวจสอบแอตทริบิวต์อื่นที่เรียกว่า Car ในคลาสบุคคลและพบถั่วที่มี ID Car ในไฟล์การกำหนดค่าดังนั้นจึงรวมตัวกันเป็นแอตทริบิวต์รถยนต์ของบุคคลโดยอัตโนมัติ
การประกอบอัตโนมัติผ่านคำอธิบายประกอบ
เราทำการปรับเปลี่ยนต่อไปนี้เป็น bean.xml
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <! doctype beans สาธารณะ "-// spring // dtd bean // en" "http://www.springframework.org/dtd/spring-beans.dtd"> id = "tom"> <constructor-arg value = "tom"/> </ebean> </ebeans>
ลบแอตทริบิวต์ autoWire = "byname" ของถั่วด้วย id tom จากนั้นเพิ่มแอตทริบิวต์เริ่มต้น autowire = "byname" ลงในถั่วโหนดเพื่อตั้งค่าเริ่มต้นของวิธีการประกอบอัตโนมัติของถั่วทั้งหมดที่กำหนดไว้ในไฟล์ จากนั้นทำการดัดแปลงคลาสบุคคลและเพิ่มคำอธิบายประกอบ @autowired ลงในวิธีการตั้งค่าของรถเพื่อแจ้งสปริงเพื่อรวบรวมคุณสมบัติโดยอัตโนมัติ เรียกใช้รหัสและผลลัพธ์ผลลัพธ์ยังคงไม่เปลี่ยนแปลง
@autowiredpublic void setcar (รถยนต์รถยนต์) {this.car = car;}หากคุณใช้แอสเซมบลีอัตโนมัติผ่านคำอธิบายประกอบคุณต้องตั้งค่าวิธีการประกอบอัตโนมัติเริ่มต้นบนรูทของถั่วก่อนแล้วคุณไม่จำเป็นต้องกำหนดค่าแอตทริบิวต์ AutoWire สำหรับถั่วแต่ละตัวที่ต้องการแอสเซมบลีอัตโนมัติในไฟล์การกำหนดค่า (หากวิธีการไม่สอดคล้องกับค่าเริ่มต้น วิธีการอธิบายประกอบมีความละเอียดอ่อนมากขึ้นและสามารถควบคุมระดับแอตทริบิวต์ของถั่วที่ต้องประกอบโดยอัตโนมัติ
ในรหัสทั้งหมดด้านบนเราใช้คลาส org.zdk.springproj1.bmw เป็นคลาสการพึ่งพาของคลาสบุคคล หากคลาสบุคคลไม่จำเป็นต้องผลักดัน BMW เนื่องจากความต้องการทางธุรกิจจำเป็นต้องเปลี่ยนการกำหนดค่าเป็น org.zdk.springproj1.benz โดยไม่ต้องแก้ไขรหัส Java ใด ๆ นี่คือพลังของฤดูใบไม้ผลิเป็นภาชนะ IOC
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของคำจำกัดความฤดูใบไม้ผลิและถั่วแอสเซมบลีในบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
การวิเคราะห์รหัสอินสแตนซ์การกำหนดค่าของ Java Spring Annotation
คำอธิบายโดยละเอียดเกี่ยวกับวงจรชีวิตของการใช้การกำหนดค่าฤดูใบไม้ผลิ
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!