Wiosna - automatyczne okablowanie fasoli

Dowiedziałeś się, jak zadeklarować fasolę za pomocą elementu <bean> i wstrzyknąć <bean> za pomocą elementów <constructor-arg> i <property> w pliku konfiguracyjnym XML.

Pojemnik Spring może autowire relacje między współpracującymi komponentami bean bez użycia elementów <constructor-arg> i <property>, co pomaga zmniejszyć ilość konfiguracji XML, którą należy napisać dla dużej aplikacji opartej na Spring.

Tryby automatycznego okablowania

Poniżej przedstawiono tryby autowiring, których można użyć do poinstruowania kontenera Spring, aby używał autowiring do wstrzykiwania zależności. Do określenia służy atrybut autowire elementu <bean />autowire tryb dla definicji fasoli.

Sr.No Tryb i opis
1 no

Jest to ustawienie domyślne, które oznacza brak automatycznego okablowania i do okablowania należy użyć jawnego odniesienia do komponentu bean. Nie masz nic specjalnego do tego okablowania. To właśnie widzieliście w rozdziale Dependency Injection.

2 wg nazwy

Automatyczne okablowanie według nazwy właściwości. Kontener Spring sprawdza właściwości fasoli, dla których atrybut autowire jest ustawiony na byName w pliku konfiguracyjnym XML. Następnie próbuje dopasować i połączyć swoje właściwości z ziarnami zdefiniowanymi przez te same nazwy w pliku konfiguracyjnym.

3 według rodzaju

Automatyczne okablowanie według typu danych właściwości. Kontener Spring sprawdza właściwości fasoli, dla których atrybut autowire jest ustawiony na byType w pliku konfiguracyjnym XML. Następnie próbuje dopasować i połączyć właściwość, jeśli jesttypepasuje do dokładnie jednej z nazw ziaren w pliku konfiguracyjnym. Jeśli istnieje więcej niż jedna taka fasola, zgłaszany jest fatalny wyjątek.

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.