ใช้ guice

อ่านบันทึกนี้แล้วก็คงไม่ได้ช่วยใช้ guice เป็น เพียงแต่ผมอยากจะบันทึกไว้ว่าผมงง อะไรแล้วรู้อะไรบ้าง. guice เป็นโปรแกรมเอาไว้ช่วยทำ dependency injection ตัวหนึ่ง ที่เน้นใช้ annotation แทนที่จะเป็นไฟล์ xml. จริงๆ แล้วเดี๋ยวนี้ Tapestry IOC หรือ Spring หรืออื่นๆ ก็ใช้ annotation ทำ dependency annotation ได้หมดแล้ว. แต่ผมก็เลือก guice เพราะเห็นว่ามันเล็กดี แถมไม่ต้องมี quoted string ไปอยู่ใน annotation จนอาจจะทำให้ refactor ลำบาก ผมก็เลยเลือกใช้ guice.

แต่ผมก็งงๆ นิดๆ อย่างถ้าผมต้องการสร้าง ฉีด (inject) BarImpl ใส่ FooImpl และฉีด FooImpl ใส่ TotoImpl อีกที นี้จะทำอย่างไร. ต้องสร้างหลายๆ module หรือเปล่า. คำตอบก็คือไม่ต้องใช้ module เดียวได้เลย

Injector injector = createInjector(new AbstractModule() {
    void configure() {
         bind(Foo).to(FooImpl);
         bind(Bar).to(BarImpl);
    }
});
Toto toto = injector.getInstance(TotoImpl.class);

เขียนประมาณข้างบนนี้ (อาจจะผิดๆ บ้าง) ก็พอใช้ได้แล้ว. แต่ว่าก็อาจจะมีปัญหาอยู่ว่าแบบนี้ module มันจะก้อนใหญ่ๆ แก้ไขยากหรือเปล่า เราทำ module ย่อยๆ เอามารวมกันได้หรือเปล่า … ตอนนี้ผมเดาๆ ว่าใช้ method ชื่อ install ใน AbstractModule ได้ แต่ว่ายังไม่ได้ลองเลย. (ดูๆ จาก Limewire มา).

ป.ล. เริ่มเล่น Tapestry เพราะอ่าน blog ของ @pphetra มา และกลับมาคลั่ง test และเล่น java อีกครั้งเพราะฟัง @roofimon พูดเรื่อง Spring มา

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s