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

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

>> เตรียมลุย Spring กับ XML Setter Method

>> เดิมบทความนี้ถูกเขียนขึ้นนานมาแล้ว (เป็นปี) เมื่อได้ทบทวนจึงต้องเขียนมันใหม่อีกครั้ง เอาน่า ผลลัพธ์ยังคงเดิมไม่สร่างซา

>> โปรเจ็กค์ใช้ Eclipse เวอร์ชัน Mars.1 Release (4.5.1) กับ Java 1.8 ครับ

>> จาร์ที่ใช้ได้แก่
- spring-core-4.2.4.RELEASE
- spring-context-4.2.4.RELEASE
- spring-beans-4.2.4.RELEASE
- spring-expression-4.2.4.RELEASE
- commons-logging-1.2

>> จาร์ข้างต้น ผมสร้าง folder ชื่อ libs ไว้ในโปรเจ็กค์ก่อนแล้ว copy พวกมันไปวางไว้, จากนั้นเลือกพวกมันทั้งหมด คลิกขวาเลือก Build Path ต่อด้วย Add Build Path, ทีนี้โปรเจ็กค์ของเราก็จะรู้จักและสามารถเรียกใช้ spring ไลบรารีได้แล้วล่ะ (พื้นฐานเลยนะนั่น)

>> เริ่มต้นสร้าง .xml ไฟล์แรกชื่อ applicationContext.xml ครับ วางไว้ภายใต้ folder ชื่อ src เลย




>> โครงสร้างทั้งหมดของโปรเจ็กค์


>> เปิดเข้าไปในไฟล์ applicationContext.xml แล้วเขียนดังนี้ (copy แล้ว paste เหอะ)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>



>> ภายใต้แท็ก beans บอก spring context ให้รู้จักคลาส HibernateCustomerRepositoryImpl ซึ่งจัดว่าเป็น repository เพื่อเรียกใช้เมธอด findAll ดังนี้

<bean name="customerRepository" class="com.pros.example.repository.HibernateCustomerRepositoryImpl" />


- อธิบายได้ว่าแอตทริบิวต์ name คือชื่อที่จะถูกเรียก ณ service bean (เดี๋ยวเขียน) นั่นหมายความว่า HibernateCustomerRepositoryImpl จะถูกฉีดให้แก่ service นั่นเอง (เราจะฉีดเข้าไปแบบ setter method)

>> ภายใต้แท็ก beans อีกครั้ง บอก spring context ให้รู้จักคลาส CustomerServiceImpl ซึ่งจัดว่าเป็น service เพื่อเรียกใช้ repository ข้างต้น

<bean name="customerService" class="com.pros.example.service.CustomerServiceImpl">
       <property name="customerRepository" ref="customerRepository" ></property>
</bean>


- อธิบายได้ว่าแอตทริบิวต์ name คือ setter method name ที่เราจะต้องไปเขียนเพิ่มใน CustomerServiceImpl ในชื่อ setCustomerRepository ส่วนแอตทริบิวต์ ref ก็อ้างอิงไปยังชื่อของ repository bean ครับผม

>> ทีนี้ service ก็จะรู้จักกับ repository แล้วจ๊ะ ขาดก็แค่ set method ของคลาส CustomerServiceImpl เท่านั้น ดังนั้นเปิดไฟล์ CustomerServiceImpl.java
- ยกเลิกการ new HibernateCustomerRepositoryImpl เพราะ xml ทำให้แล้ว จากนั้นเพิ่ม set method เข้าไปแทน ได้ดังนี้


>> ในไฟล์ main ยกเลิกการ new CustomerServiceImpl โดยตรง แต่จะ new หรือก็คือการฉีดผ่าน xml แทน

- อธิบายได้ว่า interface ชื่อ ApplicationContext จะรับเอา bean ทั้งหมดในไฟล์ applicationContext.xml ด้วยการอ่านไฟล์ดังกล่าวผ่านคลาส ClassPathXmlApplicationContext, และเมื่อมันรู้จักกับ bean ทั้งหมดแล้วเราจึงสามารถถามหา bean นั้นๆที่ต้องการได้ ในที่นี้เราต้องการ customerService bean เราก็บอกแก่มันไปครับ

>> ทดสอบผลลัพธ์


>> ก็เป็นอันว่าเรียบร้อยครับ ซึ่งต่อไปเราจะมา config ไฟล์ xml กับ constructor กันบ้าง (เยอะไปแฮะ) ฝันดีครับ

1 ความคิดเห็น: