ฤดูใบไม้ผลิ - สายไฟอัตโนมัติของถั่ว
คุณได้เรียนรู้วิธีการประกาศ bean โดยใช้องค์ประกอบ <bean> และฉีด <bean> โดยใช้องค์ประกอบ <constructor-arg> และ <property> ในไฟล์คอนฟิกูเรชัน XML
ภาชนะสปริงสามารถ autowire ความสัมพันธ์ระหว่างการทำงานร่วมกัน bean โดยไม่ใช้องค์ประกอบ <constructor-arg> และ <property> ซึ่งช่วยลดปริมาณการกำหนดค่า XML ที่คุณเขียนสำหรับแอปพลิเคชันที่ใช้ Spring ขนาดใหญ่
โหมดการเดินสายอัตโนมัติ
ต่อไปนี้เป็นโหมดการเดินสายอัตโนมัติซึ่งสามารถใช้เพื่อสั่งให้ Spring container ใช้การเดินสายอัตโนมัติสำหรับการฉีดแบบพึ่งพา คุณใช้แอตทริบิวต์ autowire ขององค์ประกอบ <bean /> เพื่อระบุautowire โหมดสำหรับนิยามถั่ว
ซีเนียร์ No | โหมดและคำอธิบาย |
---|---|
1 | no นี่เป็นการตั้งค่าเริ่มต้นซึ่งหมายความว่าไม่มีการเดินสายอัตโนมัติและคุณควรใช้การอ้างอิง Explicit bean สำหรับการเดินสาย คุณไม่มีอะไรต้องทำพิเศษสำหรับการเดินสายนี้ นี่คือสิ่งที่คุณได้เห็นแล้วในบท Dependency Injection |
2 | โดยชื่อ การเริ่มอัตโนมัติตามชื่อคุณสมบัติ Spring container ดูคุณสมบัติของ bean ที่มีการตั้งค่าแอตทริบิวต์autowireเป็นbyNameในไฟล์คอนฟิกูเรชัน XML จากนั้นจะพยายามจับคู่และเชื่อมโยงคุณสมบัติกับถั่วที่กำหนดโดยชื่อเดียวกันในไฟล์คอนฟิกูเรชัน |
3 | byType การเริ่มอัตโนมัติตามประเภทข้อมูลคุณสมบัติ Spring container จะดูคุณสมบัติของ bean ที่แอตทริบิวต์autowireตั้งค่าเป็นbyTypeในไฟล์คอนฟิกูเรชัน XML จากนั้นจะพยายามจับคู่และวางสายคุณสมบัติหากเป็นtypeตรงกับชื่อ bean อันใดอันหนึ่งในไฟล์คอนฟิกูเรชัน หากมีถั่วมากกว่าหนึ่งเมล็ดจะมีข้อยกเว้นร้ายแรง |
4 | constructor Similar to byType, but type applies to constructor arguments. If there is not exactly one bean of the constructor argument type in the container, a fatal error is raised. |
5 | autodetect Spring first tries to wire using autowire by constructor, if it does not work, Spring tries to autowire by byType. |
You can use byType or constructor autowiring mode to wire arrays and other typed-collections.
Limitations with autowiring
Autowiring works best when it is used consistently across a project. If autowiring is not used in general, it might be confusing for developers to use it to wire only one or two bean definitions. Though, autowiring can significantly reduce the need to specify properties or constructor arguments but you should consider the limitations and disadvantages of autowiring before using them.
Sr.No. | Limitations & Description |
---|---|
1 | Overriding possibility You can still specify dependencies using <constructor-arg> and <property> settings which will always override autowiring. |
2 | Primitive data types You cannot autowire so-called simple properties such as primitives, Strings, and Classes. |
3 | Confusing nature Autowiring is less exact than explicit wiring, so if possible prefer using explict wiring. |