ความแตกต่างระหว่าง Constructor Injection และ Setter Injection (พร้อมตาราง)

สารบัญ:

Anonim

เมื่อเอเจนต์ภายนอกทำการแก้ไขการพึ่งพาโดยเอเจนต์ภายนอกมากกว่าตัวคลาสเอง จะเรียกว่าการฉีดการพึ่งพา มีสองวิธีมาตรฐานของการฉีดพึ่งพาที่ได้รับการสนับสนุนในกรอบงาน Spring ผ่านอาร์กิวเมนต์ตัวสร้างหรือโดยใช้วิธีตัวตั้งค่า การฉีดพึ่งพาแบบเดิมเรียกว่าการฉีดคอนสตรัคเตอร์และแบบหลังเรียกว่าการฉีดเซ็ตเตอร์ ทั้งสองวิธีนี้ใช้เพื่อวัตถุประสงค์ที่แตกต่างกันและมีข้อดีและข้อเสียของตัวเอง

การฉีดคอนสตรัคเตอร์เทียบกับการฉีดเซตเตอร์

ความแตกต่างระหว่างการฉีด Constructor และ Setter Injection คือ การฉีด Constructor ใช้ Constructor และในทางกลับกัน setter Injection จะใช้วิธี setter เพื่อฉีดการพึ่งพา วิธีการฉีดทั้งสองประเภทนี้แตกต่างกันโดยพิจารณาจากพารามิเตอร์หลายอย่าง เช่น ความปลอดภัย การอ่านได้ สนับสนุนการไม่เปลี่ยนรูป และอื่นๆ

การฉีดคอนสตรัคเตอร์เป็นการฉีดการพึ่งพาประเภทหนึ่งในเฟรมเวิร์กสปริงที่ใช้คอนสตรัคเตอร์เพื่อฉีดการพึ่งพา การพึ่งพาที่จำเป็นสำหรับคลาสใด ๆ จะถูกระบุเป็นพารามิเตอร์ของตัวสร้างของคลาสนั้น ๆ Constructor Injection ไม่อนุญาตให้นักพัฒนาสร้างอ็อบเจกต์ใดๆ เว้นแต่ว่าการพึ่งพาทั้งหมดจะพร้อม และด้วยเหตุนี้ จึงมั่นใจได้ว่าการฉีดการพึ่งพาจะประสบความสำเร็จ

การฉีด Setter เป็นการฉีดการพึ่งพาประเภทหนึ่งในเฟรมเวิร์กสปริงที่ใช้เมธอด setter เพื่อฉีดการพึ่งพา มันมีเมธอด setter ของฟอร์ม setXXX() โดยที่ XXX หมายถึงการพึ่งพาที่ฉีดออบเจ็กต์ที่ขึ้นต่อกันเข้าไปในไคลเอนต์ วิธีการแก้ไขการพึ่งพานี้พบได้บ่อยมากในเฟรมเวิร์กสปริง

ตารางเปรียบเทียบระหว่าง Constructor Injection และ Setter Injection

พารามิเตอร์ของการเปรียบเทียบ

คอนสตรัคเตอร์ ฉีด

เซ็ตเตอร์ฉีด

พึ่งพาฉีด มันใช้ตัวสร้าง มันใช้วิธีการตั้งค่า
ความสามารถในการอ่าน ไม่สามารถอ่านได้มากเมื่อเทียบกับ setter มันน่าอ่านมากขึ้น
แทนที่คุณสมบัติ ไม่สามารถแทนที่การพึ่งพา สามารถแทนที่การพึ่งพาบางอย่างได้
การเปลี่ยนแปลง มันสร้างอินสแตนซ์ bean ใหม่เสมอ ไม่ได้สร้างอินสแตนซ์ bean ใหม่
ไม่เปลี่ยนรูป รองรับการไม่เปลี่ยนรูป มันไม่รองรับ

Constructor Injection คืออะไร?

การฉีด Constructor เป็นหนึ่งในวิธีมาตรฐานในการแก้ไขการพึ่งพาภายในกรอบงาน Spring ซึ่งกำหนดรายการการพึ่งพาที่จำเป็นสำหรับคลาสแบบคงที่โดยกำหนดสิ่งเหล่านั้นเป็นพารามิเตอร์ให้กับตัวสร้างของคลาส คลาสทั้งหมดที่ต้องการการพึ่งพาจะต้องมีตัวสร้างสาธารณะอยู่ภายใน ซึ่งใช้อินสแตนซ์เป็นอาร์กิวเมนต์ของตัวสร้าง และตัวสร้างนั้นจำเป็นต้องเป็นตัวสร้างสาธารณะเพียงตัวเดียวในคลาสนั้น

หากจำเป็นต้องมีการพึ่งพามากกว่าหนึ่งรายการ อาร์กิวเมนต์เพิ่มเติมควรถูกเพิ่มไปยังคอนสตรัคเตอร์เดียวกัน เพื่อให้แน่ใจว่าการพึ่งพาถูกฉีดเข้าไปอย่างสมบูรณ์ ควรปฏิบัติตามหลักการความรับผิดชอบเดียว ซึ่งระบุว่าสมาชิกควรทำสิ่งเดียวเท่านั้น ตัวสร้างควรปราศจากตรรกะอื่นใด เพื่อให้ตัวสร้างของคลาสเร็วขึ้นและเชื่อถือได้มากขึ้น

ข้อเท็จจริงที่สำคัญประการหนึ่งของการฉีดคอนสตรัคเตอร์คืออ็อบเจ็กต์จะไม่ถูกสร้างขึ้นเว้นแต่ว่าการพึ่งพาทั้งหมดจะพร้อม เนื่องจากมันสร้างอินสแตนซ์ใหม่ทุกครั้งที่มีการเรียก Constructor ดังนั้นจึงไม่สามารถแทนที่ได้ โดยทั่วไปแล้วการฉีด Constructor จะใช้ในกรณีที่มีความจำเป็นในการสร้างวัตถุที่มีการพึ่งพาทั้งหมด นี่เป็นวิธีที่ใช้ได้โดยทั่วไปและง่ายที่สุดในการนำการขึ้นต่อกันไปใช้อย่างถูกต้อง

การฉีด Setter คืออะไร?

Setter injection เป็นหนึ่งในวิธีมาตรฐานในการแก้ไขการพึ่งพาภายในกรอบงาน Spring ซึ่งใช้เมธอด setter เพื่อแก้ไขการขึ้นต่อกัน เมธอด setter อยู่ในรูปแบบ setXXX() โดยที่ XXX ระบุการขึ้นต่อกันที่จำเป็นต้องฉีด ในวิธีการฉีดประเภทนี้ ขั้นแรก สร้างอ็อบเจ็กต์ และต่อมา มีการฉีดการพึ่งพา สำหรับการกำหนดค่า Spring จะใช้ไฟล์ XML ดังนั้นความสามารถในการอ่านจึงเป็นข้อกังวลใหญ่

เนื่องจากเมธอด setter มีรูปแบบชื่อเมธอดที่ระบุ จึงช่วยเพิ่มความสามารถในการอ่านได้หลายวิธี เมื่อมีความจำเป็นต้องฉีดการอ้างอิงจำนวนมากขึ้น ประเภทการฉีดเซ็ตเตอร์จึงเป็นที่นิยมและเป็นที่ต้องการมากกว่าวิธีการฉีดประเภทอื่นๆ นอกจากนั้น โดยใช้ setter injection นักพัฒนาสามารถแทนที่และเปลี่ยนค่าได้อย่างง่ายดาย เนื่องจากไม่ได้สร้าง bean Instance ใหม่ทุกครั้ง ข้อเสียเปรียบเพียงประการเดียวของการฉีด setter คือไม่รับประกันว่าจะมีการฉีดสารที่พึ่งพาได้อย่างสมบูรณ์

ไม่มีการรับประกันว่าวัตถุบางอย่างมีการพึ่งพาการฉีดหรือไม่ กล่าวอีกนัยหนึ่ง หมายความว่าอาจมีอ็อบเจ็กต์ที่มีการพึ่งพาที่ไม่สมบูรณ์ การฉีด Setter เป็นวิธีที่ยืดหยุ่นที่สุดและเป็นวิธีที่พบได้บ่อยที่สุดในการนำการพึ่งพาการฉีดไปใช้

ความแตกต่างหลักระหว่าง Constructor Injection และ Setter Injection

บทสรุป

สิ่งที่สำคัญที่สุดคือการฉีดการพึ่งพาทั้งสองวิธีปล่อยให้เป็นการฉีดคอนสตรัคเตอร์หรือการฉีดเซ็ตเตอร์มีข้อดีและข้อเสียของตัวเอง นอกจากนั้น Spring ไม่ได้ละเว้นนักพัฒนาจากการใช้ใครก็ตามนอกจากผู้ประเมิน พวกเขามีอิสระที่จะใช้ทั้งการฉีดคอนสตรัคเตอร์และการฉีดเซ็ตเตอร์ในไฟล์คอนฟิกูเรชัน Spring ไฟล์เดียว สิ่งสำคัญที่ควรคำนึงถึงขณะฉีดการพึ่งพาคือการใช้ Constructor Injection เมื่อมีความจำเป็นที่จำเป็นในการสร้างวัตถุที่มีการพึ่งพาทั้งหมด และใช้ setter Injection เมื่อจำนวนการขึ้นต่อกันมากขึ้นหรือหากมีความจำเป็นที่ดีขึ้น ความสามารถในการอ่าน

อ้างอิง

  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=th&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

ความแตกต่างระหว่าง Constructor Injection และ Setter Injection (พร้อมตาราง)