Spring Framework ถือเป็นหนึ่งใน framework ที่ได้รับความนิยมมากที่สุดในโลกของการพัฒนา Application ด้วย Java ด้วยความยืดหยุ่นและความสามารถในการจัดการกับ dependencies ต่างๆ ได้อย่างมีประสิทธิภาพ เทคโนโลยีนี้ถูกพัฒนาขึ้นเพื่อทำให้การเขียนโปรแกรมมีความง่ายดายยิ่งขึ้น โดยเฉพาะอย่างยิ่งเมื่อพูดถึงการจัดการ dependencies ซึ่งเราสามารถใช้ annotation อย่าง @Autowired เพื่อ Inject Dependencies ได้อย่างมีประสิทธิภาพ
ก่อนที่เราจะพูดถึง @Autowired เราควรมีความเข้าใจเกี่ยวกับ Dependency Injection (DI) เสียก่อน ในสรุปง่ายๆ DI คือกระบวนการที่เราส่ง dependencies ให้กับวัตถุ (object) โดยไม่จำเป็นต้องมีการกำหนดค่า dependencies นั้นๆ ภายในวัตถุเอง หมายความว่าวัตถุไม่ต้องรู้ล่วงหน้าว่าจะต้องขึ้นอยู่กับ dependencies ใดหรือมีวิธีการสร้าง และส่งเสริมให้เกิด loose coupling ทำให้เราสามารถแก้ไข ทดสอบ หรือปรับเปลี่ยนโปรแกรมของเราได้ง่ายขึ้น
@Autowiried เป็น annotation ที่ใช้บอก Spring ว่าเราต้องการให้ Spring Inject Dependencies ให้กับ field, constructor, หรือ setter method ที่กำหนดไว้ โดยที่เราไม่ต้องทำการ new object ขึ้นเอง ซึ่งทำให้การจัดการหรือเปลี่ยนแปลง dependency ของ object เหล่านั้นง่ายขึ้น
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public void spellCheck() {
spellChecker.checkSpelling();
}
}
ในตัวอย่างนี้เราใช้งาน @Autowired เพื่อทำการ inject ตัวแปรของ class SpellChecker เข้ามาใน TextEditor โดยที่เราไม่ต้องใช้ `new SpellChecker()` ใน class TextEditor
2. Constructor Injectionการใช้ constructor injection จะมีประโยชน์มากในการสร้าง immutability สำหรับออบเจ็กต์ ทำให้ dependencies ถูกรับไว้อย่างปลอดภัยตั้งแต่เริ่มต้น
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TextEditor {
private SpellChecker spellChecker;
@Autowired
public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
ด้วย @Autowired บน constructor ทำให้ Spring เข้าใจว่าเมื่อสร้าง TextEditor ให้ spring ทำการ inject SpellChecker ที่ต้องการอัตโนมัติ
3. Setter Method Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TextEditor {
private SpellChecker spellChecker;
@Autowired
public void setSpellChecker(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
Setter Injection จะคล้ายกับ Field Injection แต่จะใช้สำหรับกรณีที่เราต้องการให้มีการตั้งค่า dependencies หลัง object ถูกสร้างขึ้นแล้ว
@Autowire นั้นถูกใช้อย่างกว้างขวางใน Application ที่มีการพัฒนาโดยใช้ Spring Framework โดยเฉพาะในระบบที่มีการจัดการ dependencies จำนวนมาก เช่น ระบบ CRM หรือระบบ e-commerce ขนาดใหญ่ ที่มีหลายโมดูลที่ต้องการความคลาดเคลื่อนและการบำรุงรักษาง่าย
- ลดความซับซ้อนในการเขียนโค้ด
- ลดความจำเป็นในการใช้โค้ด hard-coded
- ส่งเสริมการทดสอบแยกและการพัฒนา
- ข้อจำกัด:- การใช้ field injection มักทำให้ testing ทำได้ยากขึ้น ควรหลีกเลี่ยงใช้ในกรณีที่ไม่จำเป็น
- มีความจำเป็นต้องทำความเข้าใจกับ container ที่ Spring ใช้จัดการขอบเขตของ object
การใช้ @Autowired ใน Spring ช่วยลดภาระในการจัดการกับ dependencies ภายใน Application ทำให้ระบบมีคุณสมบัติที่สามารถบำรุงรักษาได้ง่าย และยืดหยุ่นในการเปลี่ยนแปลงกับความต้องการที่เปลี่ยนไป หากคุณสนใจที่จะขยายความรู้เพิ่มเติมเกี่ยวกับ Spring Framework หรือการพัฒนาโปรแกรมในทางปฏิบัติ สามารถลองมาศึกษาเพิ่มเติมจากแหล่งเรียนรู้ต่างๆ เช่น การสมัครเรียนที่สถานศึกษาที่มีหลักสูตรเกี่ยวกับการเขียนโปรแกรมเชิงลึกอย่าง EPT ที่จะช่วยเสริมสร้างความชำนาญด้านการเขียนโปรแกรมแก่คุณอย่างครบถ้วน.
เรียนรู้การใช้ @Autowired ไม่ได้แค่ช่วยให้โค้ดของคุณดูสะอาดและเข้าใจง่ายขึ้น แต่ยังช่วยทำให้โครงสร้างของ application มีความมีเสถียรภาพและขยายขอบเขตได้ในทันทีที่มีความจำเป็นต้องทำการปรับเปลี่ยนในระยะยาว
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM