[Java] Spring Framework กับความสามารถ Dependency Injection

          "Spring" ประกอบด้วย Spring Projects มากมายให้เราได้เลือกใช้งาน ซึ่งการที่จะพูดว่า "ใช้ Spring" คงจะแคบเกินไปแล้ว ซึ่งในส่วนของโพสนี้ก็จะเล่าถึง Spring Framework ที่เกี่ยวข้องในการทำ Web Application แบบง่ายๆ กันครับ

          เราสามารถเริ่มต้น Web Application Project ที่ใช้ Spring Boot ได้ง่ายๆ ถ้ายังไม่รู้จักแนะนำให้ไปทำความรู้จักกันก่อนครับ >> รู้จัก Spring Boot ฉบับมือใหม่

Dependency Injection

          สิ่งที่ยิ่งใหญ่ที่สุดของ Spring คือเรื่องความสามารถในการทำ dependency injection (DI) ซึ่ง DI นี้เองที่จะสามารถเชื่อมโยง spring framework ต่างๆ เข้าด้วยกัน และมีประโยชน์อย่างมากในการออกแบบ architecture ของ project
@Autowired
          Autowired เป็น annotation ที่ทำให้เราสามารถ 'Inject' object ขึ้นมาใช้งานได้ โดย object ดังกล่าวจะต้องถูกประกาศไว้ก่อนหน้า และเป็น object ที่มีความเป็น Spring หรือมีชื่ออย่างเป็นทางการว่า "Spring Bean"

          Spring Bean คือ class ที่ถูกเพิ่มความสามารถเข้าไป โดยมีคุณสมบัติรองรับ DI ซึ่งมีวิธีที่จะได้มาซึ่งความสามารถนี้มี 3 วิธี คือ
  • เขียนใน beans.xml
  • ใช้ Class Annotation : @Configuration ร่วมกับ Method Annotation : @Bean
  • ใช้ Class Annotation : @Component
          ทั้ง 3 วิธี ให้ผลลัพธ์อย่างเดียวกัน ต่างกันที่ความยาก-ง่ายในการเขียน แน่นอนว่าเราต้องเลือกวิธีที่ง่ายที่สุด คือ @Component นอกจากความง่ายแล้ว ยังมีพรรคพวกที่ถูกสร้างมาเพื่อกำหนดการใช้งานที่เฉพาะเจาะจงได้มากขึ้น ดังนี้

Component is the most generic
  • @Controller - เป็นชั้นของหน้าบ้าน (Presentation Layer) เช่น Spring MVC ที่เล่นกับหน้าจอ หรือรับส่งค่าผ่าน Web Service
  • @Service - เป็นชั้นของ Business (Business Layer) ที่ทำงานเรื่องของ logic ต่างๆ อาจทำ Transaction management ที่ชั้นนี้
  • @Repository - เป็นชั้นของ Persistence หรือบางคนก็เรียก DAO (Persistence Layer) ซึ่งทำหน้าที่เชื่อมต่อกับ database เช่น การใช้งาน Hibernate 
          แต่ละตัว ถูกแบ่งตามการทำงานในแต่ละชั้น (Tier) ทำให้เราเห็นภาพของ architecture ชัดขึ้น และยังคงสามารถเชื่อมโยงกันผ่าน @Autowired เช่นเดิม ซึ่งก็ถือว่าเป็นการบ่งบอกตัวตนของ Spring Bean ที่ดีทีเดียว

โปรเจคตัวอย่าง ประกอบด้วยการใช้งานสร้าง project web services ง่ายๆ ด้วย Spring Boot
https://github.com/lordgift/SpringBoot2Tutorial.git

          จะเห็นว่า Spring ประกอบด้วยรายละเอียดปลีกย่อยอีกมากมาย โพสนี้เป็นแค่ส่วนเล็กๆ ไม่กี่ส่วนที่ถูกยกมาสร้าง REST web service เท่านั้น แต่ก็ไม่ได้หมายความว่าใช้ Spring 100% แล้วจะดี เพราะฉะนั้นเลือกหยิบใช้ตามความเหมาะสมนะครับ

Facebook Comment

Popular post of 7 days

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ