เป็นเวลานานที่ฉันเชื่อว่ามีค่าในการมี "การรวมศูนย์การประกาศการกำหนดค่า" เช่นไฟล์ xml ที่เราทุกคนเคยใช้ จากนั้นฉันก็ตระหนักว่าสิ่งต่าง ๆ ส่วนใหญ่ในไฟล์นั้นไม่ใช่การกำหนดค่า - มันไม่เคยเปลี่ยนแปลงที่ไหนเลยหลังจากการพัฒนามาตลอด แล้วฉันตระหนักว่า "ศูนย์" เท่านั้นที่มีค่าในระบบค่อนข้างเล็ก - เฉพาะในระบบขนาดเล็กที่คุณจะสามารถที่จะ grok แฟ้มการกำหนดค่าเป็นทั้ง และคุณค่าของการทำความเข้าใจการเดินสายโดยรวมคืออะไรเมื่อ "การเดินสาย" เดียวกันส่วนใหญ่จะถูกทำซ้ำโดยอ้างอิงในรหัส? ดังนั้นสิ่งเดียวที่ฉันเก็บไว้คือเมตาดาต้า (คำอธิบายประกอบ) ซึ่งยังคงเป็นชนิดของการประกาศ สิ่งเหล่านี้ไม่เคยเปลี่ยนแปลงที่รันไทม์และพวกเขาไม่เคย ข้อมูล "การกำหนดค่า" ที่ใครบางคนจะเปลี่ยนได้ทันที - ดังนั้นฉันคิดว่าการเก็บไว้ในรหัสเป็นสิ่งที่ดี
ฉันใช้การเดินสายอัตโนมัติเต็มรูปแบบมากที่สุดเท่าที่จะทำได้ ฉันรักมัน. ฉันจะไม่กลับไปที่ฤดูใบไม้ผลิแบบเก่าเว้นแต่จะถูกคุกคามที่จุดปืน เหตุผลในการเลือกของฉัน@Autowired
เปลี่ยนไปตลอดเวลา
ตอนนี้ฉันคิดว่าเหตุผลที่สำคัญที่สุดสำหรับการใช้การลงทะเบียนอัตโนมัติคือระบบของคุณมีสิ่งที่เป็นนามธรรมน้อยกว่าในการติดตาม "ชื่อถั่ว" หายไปอย่างมีประสิทธิภาพ เปลี่ยนเป็นชื่อถั่วเท่านั้นที่มีอยู่เนื่องจาก xml ดังนั้นความไม่สมบูรณ์ของเลเยอร์ทางอ้อม (ซึ่งคุณจะใช้ชื่อถั่ว "foo" ใน bean "bar") ตอนนี้ฉันเชื่อมต่ออินเทอร์เฟซ "Foo" ลงใน bean ของฉันโดยตรงและการนำไปใช้งานถูกเลือกโดยโปรไฟล์รันไทม์ สิ่งนี้ทำให้ฉันสามารถทำงานกับรหัสเมื่อติดตามการอ้างอิงและการใช้งาน เมื่อฉันเห็นการพึ่งพา autowired ในรหัสของฉันฉันก็สามารถกดปุ่ม "ไปสู่การใช้งาน" ใน IDE ของฉันและรายการของการใช้งานที่รู้จักขึ้นมา ในกรณีส่วนใหญ่มีการนำไปใช้เพียงครั้งเดียวและฉันเข้าเรียนได้โดยตรง สามารถ' การนำไปใช้งานแบบใด (ฉันอ้างว่าสิ่งที่ตรงกันข้ามนั้นใกล้เคียงกับความจริงด้วยการเดินสาย xml - ตลกว่ามุมมองของคุณเปลี่ยนไปอย่างไร)
ตอนนี้คุณสามารถพูดได้ว่ามันเป็นเพียงเลเยอร์ที่ง่ายมาก แต่แต่ละเลเยอร์ของสิ่งที่เป็นนามธรรมที่เราเพิ่มเข้าไปในระบบของเราเพิ่มความซับซ้อน ฉันไม่คิดว่า xml จะเพิ่มคุณค่าที่แท้จริงให้กับระบบใด ๆ ที่ฉันทำงานด้วย
ระบบส่วนใหญ่ที่ฉันเคยทำงานด้วยมีเพียงหนึ่งการกำหนดค่าของสภาพแวดล้อมรันไทม์ที่ใช้งานจริง อาจมีการกำหนดค่าอื่น ๆ สำหรับการทดสอบเป็นต้น
ฉันจะบอกว่า autowiring เต็มรูปแบบคือ ruby-on-rails ของฤดูใบไม้ผลิ: มันรวบรวมความคิดว่ามีรูปแบบการใช้งานปกติและทั่วไปที่กรณีส่วนใหญ่ใช้ตาม ด้วยการกำหนดค่า XML คุณอนุญาตให้มีการใช้การกำหนดค่าที่สอดคล้อง / ไม่สอดคล้องกันจำนวนมากซึ่งอาจ / ไม่ได้ตั้งใจ ฉันเคยเห็นการกำหนดค่า xml จำนวนมากไปลงน้ำด้วยความไม่สอดคล้องกัน - มันได้รับการปรับปรุงใหม่พร้อมกับรหัสหรือไม่ ไม่คิด รูปแบบเหล่านั้นมีเหตุผลหรือไม่? มักจะไม่
เราใช้ตัวระบุในการกำหนดค่าของเราและหาวิธีอื่น ๆ ในการแก้ไขสถานการณ์เหล่านี้ นี้เป็นที่ชัดเจน "ข้อเสีย" เราพบ: เราได้เปลี่ยนไปเล็กน้อยรหัสทางที่เราจะทำให้มันเรียบโต้ตอบกับ autowiring: ลูกค้าพื้นที่เก็บข้อมูลการดำเนินการไม่ทั่วไปRepository<Customer>
อินเตอร์เฟซ แต่เราทำให้อินเตอร์เฟซที่ขยายCustomerRepository
Repository<Customer>
บางครั้งก็มีกลอุบายหรือสองเมื่อมันมาถึง subclassing แต่มันมักจะชี้ให้เราไปในทิศทางของการพิมพ์ที่แข็งแกร่งซึ่งฉันพบว่าเกือบจะเป็นทางออกที่ดีกว่าเสมอ
แต่ใช่คุณกำลังผูกมัดกับสไตล์เฉพาะของ DI ที่สปริงส่วนใหญ่ทำ เราไม่ได้ทำให้ setters สาธารณะสำหรับการอ้างอิงใด ๆ เพิ่มเติม (ดังนั้นคุณจึงสามารถยืนยันว่าเรากำลัง 1 ในแผนก encapsulation / ซ่อนข้อมูล) เรายังคงมีบาง XML ในระบบของเรา แต่ XML โดยทั่วไปเพียง แต่มีความผิดปกติ การบันทึกอัตโนมัติเต็มรูปแบบทำงานร่วมกับ xml ได้ดี
สิ่งเดียวที่เราต้องการตอนนี้คือสำหรับ@Component
, @Autowired
และส่วนที่เหลือจะถูกรวมอยู่ใน JSR (เช่นJSR-250 ) ดังนั้นเราจึงไม่จำเป็นต้องผูกกับฤดูใบไม้ผลิ นี่คือวิธีที่สิ่งต่าง ๆ เกิดขึ้นในอดีต ( java.util.concurrent
สิ่งที่ทำให้ใจ) ดังนั้นฉันจะไม่แปลกใจเลยถ้าสิ่งนี้เกิดขึ้นอีกครั้ง