วันเสาร์ที่ 16 มกราคม พ.ศ. 2559

คึกอยากจะทบทวน Spring Framework part 6 (New 2016)

>> XML กับ Default Constructor และ Constructor

>> ยังอยู่กับบทความเดิมแต่เอามาเขียนใหม่ครับ สำหรับ part ที่ผ่านมาได้แสดงการเรียกใช้ setter method ของคลาส CustomerServiceImpl กันไปแล้ว เริ่มด้วย
- เตรียมออบเจ็กต์ HibernateCustomerRepositoryImpl ที่ฝั่ง xml ไว้ก่อน
- เวลาถัดไปคือในโค้ดจาวาเมื่อเรียกใช้ context และขอ bean ที่ชื่อ customerService มาใช้งานซึ่งมันต้องการออบเจ็กต์ HibernateCustomerRepositoryImpl เพื่อให้การทำงานของมันสมบูรณ์ เหตุนี้ context จึงฉีดออบเจ็กต์ HibernateCustomerRepositoryImpl ให้ผ่าน setter method ครับผม

>> ภาพดังต่อไปนี้แสดงให้เห็นโครงสร้างของโปรเจ็กค์ part ที่แล้วว่าประกอบด้วยอะไรบ้าง





>> ตามหัวข้อเรื่องที่กล่าวไว้ เราจะเปลี่ยนจากการฉีดผ่าน setter method เป็น constructor ซึ่งเพื่อนๆทราบอยู่แล้วว่า ออบเจ็กต์ใดๆในโลกของจาวาจะเกิดขึ้นได้ต้อง new ผ่าน constructor เท่านั้น และผมเข้าใจว่า สสารไม่หายไปไหน นั่นหมายความว่า หากจาวาโค้ดไม่มีคำสั่ง new ไปยัง constructor เจ้าคำสั่งนี้ก็ต้องย้ายไปเขียนที่ไหนสักแห่ง โดยใครสักคนที่ทำหน้าที่นี้แทนครับ แน่นอนว่าเรื่องนี้คนที่รับไปจัดการให้ก็คือ spring ในส่วน xml นั่นเอง

>> เพราะเป็นไปไม่ได้ที่ HibernateCustomerRepositoryImpl และ CustomerServiceImpl รวมถึงคลาสอื่นๆจะถูกเรียกใช้ได้โดยปราศจากการ new ไปยัง constructor แสดงว่าที่ผ่านมาแม้เราไม่ได้เขียน constructor เจ้า constructor นี้ก็ยังมีอยู่ตลอดเวลา ใช่ครับผม อย่างที่เพื่อนๆทราบอยู่แล้วว่ามันคือ default constructor นั่นเอง

>> ในเมื่อต้องการส่งออบเจ็กต์ HibernateCustomerRepositoryImpl ให้ service ผ่านเข้ามาทาง constructor จึงต้องมาเขียน constructor ที่รับค่านี้ได้อย่างไรล่ะ และเพื่อการทดสอบนี้ได้ผลชัดเจนยิ่งขึ้น ให้เพื่อนๆ comment เจ้า setter method ออกไปก่อน
- ภาพข้างต้นนี้ เมื่อเราเขียน constructor ขึ้นมาเอง เจ้า default constructor จึงตายไปแล้วเรียบร้อย (บอกให้ฟังเฉยๆ)

>> ก็กลับไปบอก spring ครับว่า เธอๆช่วยเตรียมออบเจ็กต์ให้หน่อย และเธอฉีดเข้ามาทาง constructor ที่รับออบเจ็กต์ HibernateCustomerRepositoryImpl นี้นะ

- อธิบายได้ว่า constructor-arg index="0" คือตำแหน่งแรกของ args ตัวที่หนึ่งและ ref="customerRepository" ก็มีไว้อ้างไปยังคลาส HibernateCustomerRepositoryImpl ที่เขียน config ไว้ไง

>> ด้วยการกำหนดเพียงเท่านี้ ก็ทดสอบผลลัพธ์ จะเห็นว่าโปรแกรมของเรายังทำงานได้ดังเดิม จบแล้วจ้า


>> part ต่อไปเราจะเริ่ม injection เหล่าคลาสโดยการใช้ autowire กันนะครับ ค่อยเป็นค่อยไปเน๊อะ ใช้คำหรือเขียนผิดพลาดอย่างไรต้องขออภัยด้วยจริงๆ เพราะผมเองก็เพิ่งเริ่มต้นเหมือนกัน ดังนั้นเรามาเป็นเพื่อนกันนะ (^ ^)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น