คำนำ
ในการพัฒนา Java ปกติโปรแกรมเมอร์จำเป็นต้องพึ่งพาคลาสอื่น ๆ ในชั้นเรียนดังนั้นพวกเขามักจะใช้ new กับคลาสใหม่และโทรหาอินสแตนซ์คลาส ปัญหาเกี่ยวกับการพัฒนานี้คืออินสแตนซ์คลาส new ไม่ใช่เรื่องง่ายที่จะจัดการ ฤดูใบไม้ผลิเสนอแนวคิดของการฉีดพึ่งพานั่นคือคลาสการพึ่งพาไม่ได้รับการยกตัวอย่างโดยโปรแกรมเมอร์ แต่ช่วยให้เรา new อินสแตนซ์ผ่านคอนเทนเนอร์ฤดูใบไม้ผลิและอินสแตนซ์ฉีดเข้าไปในคลาสที่ต้องการวัตถุ คำอื่นสำหรับการฉีดพึ่งพาคือ "การควบคุมการผกผัน" ความเข้าใจร่วมกันคือ: โดยปกติเราจะมีอินสแตนซ์ new และการควบคุมของอินสแตนซ์นี้คือโปรแกรมเมอร์ของเราและการผกผันควบคุมหมายความว่าการทำงานของอินสแตนซ์ new ไม่ได้ทำโดยโปรแกรมเมอร์ของเรา แต่ถูกส่งไปยังคอนเทนเนอร์ฤดูใบไม้ผลิ
มีสี่วิธีในการฉีดพึ่งพาในฤดูใบไม้ผลิ
1. ชุดฉีด (โดยปกติเรียกว่าการฉีดแอตทริบิวต์)
2. การฉีดคอนสตรัคเตอร์
3. การฉีดอินเทอร์เฟซ (โดยทั่วไปไม่ได้ใช้ตอนนี้)
4. การฉีดคำอธิบายประกอบ (@autowire)
ด้านล่างเป็นตัวอย่างของการใช้วิธีการฉีดวิธีการการฉีดคอนสตรัคเตอร์และการฉีดคำอธิบายประกอบ
1. ชุดวิธีการฉีด (การฉีดแอตทริบิวต์)
userdao.java
คลาสสาธารณะ UserDao {Public Void InsertUser (ผู้ใช้ผู้ใช้) {// ตรรกะเฉพาะที่ละเว้น}}userservice.java
อินเทอร์เฟซผู้ใช้งานสาธารณะ {void insertuser (ผู้ใช้ผู้ใช้);}userserviceimpl.java
ระดับสาธารณะ UserserViceImpl ใช้ UserserVice {UserDao Private UserDao; โมฆะสาธารณะ setUserDao (USERDAO USERDAO) {this.USERDAO = USERDAO; } public void insertuser (ผู้ใช้ผู้ใช้) {userdao.insert (ผู้ใช้); -ไฟล์การกำหนดค่าสปริง
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! name = "userdao" ref = "userdao"> </ebean> </ebeans>
ข้างต้นสามารถฉีด userdao ลงใน UserserViceImpl
2. การฉีดคอนสตรัคเตอร์
user.java
ผู้ใช้ระดับสาธารณะ {// เพื่อความเรียบง่ายเขียนสองแอตทริบิวต์ชื่อสตริงส่วนตัว; อายุจำนวนเต็มส่วนตัว // ละเว้นวิธีการ getter/setter เกี่ยวกับชื่อ, อายุผู้ใช้สาธารณะ (ชื่อสตริง, อายุ int) {this.name = name; this.age = อายุ; -ตอนนี้ใช้ไฟล์การกำหนดค่าสปริงเพื่อฉีดวัตถุผู้ใช้
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! จำนวนพารามิเตอร์)-> <constructor-arg type = "java.lang.string" index = "0" value = "Zhangsan"/> <constructor-Arg type = "java.lang.integer" index = "1" value = "20>
ข้างต้นสามารถฉีดค่าคุณสมบัติลงในวัตถุผู้ใช้ แน่นอนถ้าคุณต้องการฉีดตัวอย่างโดยใช้วิธีการตั้งค่าจริง ๆ แล้วเหมือนกัน มีความจำเป็นที่จะต้องมีตัวสร้างใน UserServiceImpl และพารามิเตอร์ที่เป็นทางการคือ UserDao ดังนั้นจึงไม่จำเป็นต้องใช้วิธี setter
จากนั้นการเขียนไฟล์การกำหนดค่าสปริงควรเปลี่ยนเป็นสิ่งนี้
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! พารามิเตอร์ตัวสร้างเริ่มต้นที่ 0 (หลีกเลี่ยงตัวสร้างหลายตัวที่มีจำนวนพารามิเตอร์เท่ากัน)-> <constructor-Arg index = "0" ref = "userdao"> </ebean>
นอกจากนี้ยังสามารถบรรลุผลที่ได้จากการฉีดวิธีการข้างต้น
3. การฉีดคำอธิบายประกอบ
ฉันไม่เคยลองว่ามันสามารถ @Autowire ได้สำเร็จโดยไม่ต้องเพิ่ม @Component,@Service,@Controller ฯลฯ ในคลาสเหล่านี้ อย่างไรก็ตามขอแนะนำให้เพิ่มคำอธิบายประกอบที่สอดคล้องกันในระดับที่สอดคล้องกัน ในตัวอย่างต่อไปนี้ UserDao เป็นของชั้นโมดูล ในฤดูใบไม้ผลิคุณสามารถใช้คำอธิบายประกอบ @Component
userdao.java
@componentpublic คลาส UserDao {public void insertuser (ผู้ใช้ผู้ใช้) {// ตรรกะเฉพาะที่ละเว้น}}userservice.java
อินเทอร์เฟซผู้ใช้งานสาธารณะ {void insertuser (ผู้ใช้ผู้ใช้);}userserviceimpl.java
// แนะนำแพ็คเกจสปริงที่เกี่ยวข้อง @ServicePublic คลาส UserserViceImpl ใช้ UserserVice {@Autowire ส่วนตัว UserDao UserDao; โมฆะสาธารณะ insertuser (ผู้ใช้ผู้ใช้) {userDao.Insert (ผู้ใช้); -ไฟล์กำหนดค่าที่สอดคล้องกันของ Spring
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <! ในการพัฒนาจริงคุณสามารถสแกนตามแพ็คเกจที่เกี่ยวข้องกับส่วนประกอบคำอธิบายประกอบ-> <บริบท: ส่วนประกอบ-สแกนฐานแพ็คเกจ = "*"> <!-เปิดการสแกนส่วนประกอบ-> </บริบท: องค์ประกอบ-สแกน> <บริบท: คำอธิบายประกอบ-> id = "userservice"/> </ebeans>
อย่างไรก็ตามในระหว่างกระบวนการพัฒนาได้เปิดใช้งานการฉีดวิธีการตั้งค่าและเปิดใช้งานการฉีดคำอธิบายประกอบสปริงจะเลือกการฉีดชุดก่อนดังนั้นจึงไม่ลืมที่จะให้วิธีการชุดที่สอดคล้องกันมิฉะนั้นจะล้มเหลว
จากการเปรียบเทียบการฉีดคำอธิบายประกอบจะสะดวกกว่าการฉีดอื่น ๆ และเขียนรหัสและไฟล์การกำหนดค่าน้อยลง ขอแนะนำให้ใช้การฉีดคำอธิบายประกอบในระหว่างกระบวนการพัฒนา
สรุป
ข้างต้นเป็นการแนะนำอย่างสมบูรณ์เกี่ยวกับวิธีการฉีดพึ่งพาหลายวิธีในฤดูใบไม้ผลิ ฉันหวังว่ามันจะช่วยคุณในการเรียนหรือที่ทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความเพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com