ดูเหมือนว่า GWT จะมีกลไก DI แบบอบในตัวของตัวเอง (GWT.create(Class<?>)
) GIN มีประโยชน์อะไรบ้างนอกเหนือจากนี้? คุณควรใช้สิ่งเหล่านี้ร่วมกันหรือแยกจากกันหรือไม่? ฉันชอบ Guice ดังนั้นฉันจึงอยากใช้ GIN แต่ไม่อยากแนะนำถ้า GWT ทำสิ่งเดียวกันทันทีตั้งแต่แกะกล่อง
GWT.create(Class‹?›) กับ GIN?
คำตอบ (2)
Gin และ GWT.create
มีความแตกต่างเล็กน้อย - Gin ให้ความสำคัญกับการให้การขึ้นต่อกันผ่านคำอธิบายประกอบ @Inject
มากกว่า ไม่ว่าจะเป็นบนฟิลด์ ตัวตั้งค่า หรือตัวสร้าง ในขณะที่ GWT.create
เน้นเกี่ยวกับการนำไปใช้งานโดยเฉพาะ Gin จะใช้คอนสตรัคเตอร์ใดๆ ที่คุณระบุ แต่คุณต้องระบุประเภทการแทนที่โดยเฉพาะ ในขณะที่ GWT.create
จะใช้ได้กับคอนสตรัคเตอร์เริ่มต้นเท่านั้น และ 'กฎการย้อนกลับ' ของคุณไม่จำเป็นต้องแม่นยำมากนัก และอาจทำให้คลาสใหม่ด้วย ถูกสร้างขึ้นในเวลารวบรวม นอกจากนี้ยังสามารถดูสภาพแวดล้อมที่ผู้ใช้ใช้งานอยู่ และเลือกชุดกฎเฉพาะตามนั้น ซึ่ง Gin ไม่สามารถทำได้
Gin ใช้ GWT.create
เพื่อรับคุณสมบัติอื่นๆ เหล่านี้จริงๆ หากคุณไม่มีกฎที่กำหนดไว้ Gin จะเรียก GWT.create
โดยอัตโนมัติ ซึ่งหมายความว่าถ้าคุณมีกฎเช่น
@Inject MyRemoteServiceAsync rpcService;
Gin จะโทร GWT.create
เพื่อสร้างการโทร rpc นั้น นอกจากนี้ยังใช้ได้กับ UiBinder, Editor Drivers, ข้อความ I18n และค่าคงที่ ฯลฯ
หากคุณเข้าใจและชอบ Guice อยู่แล้ว Gin ก็ไม่ควรเป็นก้าวสำคัญสำหรับคุณ และคุณยังคงสามารถเรียกใช้ GWT.create ได้โดยตรง หรือขอให้ Gin ดำเนินการโดยปริยาย ในความเป็นจริง เพื่อที่จะใช้งาน Gin คุณต้องโทร GWT.create(MyGinjector.class)
เพื่อเริ่มเล่น
GWT.create()
ไม่เกี่ยวข้องกับการฉีดการพึ่งพา มันเป็นวิธี โรงงาน
ข้อแตกต่างระหว่าง GWT.create(SomeThing.class)
และ new SomeThing()
เพียงอย่างเดียวคือสามารถแทนที่หรือสร้างคลาส SomeThing
ที่แน่นอนได้โดยใช้สิ่งที่เรียกว่า การผูกมัดที่เลื่อนออกไป แต่ไม่มีอะไรใน GWT.create()
เกี่ยวกับการจัดเตรียมการอ้างอิงให้กับวัตถุ GWT.create()
d เป็นต้น