Frühling - Bohnen Auto-Wiring
Sie haben gelernt, wie Sie Beans mit dem Element <bean> deklarieren und <bean> mit den Elementen <constructor-arg> und <property> in die XML-Konfigurationsdatei einfügen.
Der Federbehälter kann autowire Beziehungen zwischen zusammenarbeitenden Beans ohne Verwendung von <constructor-arg> - und <property> -Elementen, wodurch Sie weniger XML-Konfiguration für eine große Spring-basierte Anwendung schreiben müssen.
Autowiring-Modi
Im Folgenden sind die Autodraht-Modi aufgeführt, mit denen der Spring-Container angewiesen werden kann, Autowiring für die Abhängigkeitsinjektion zu verwenden. Sie verwenden das Autowire-Attribut des <bean /> -Elements, um anzugebenautowire Modus für eine Bean-Definition.
Sr.Nr. | Modus & Beschreibung |
---|---|
1 | no Dies ist die Standardeinstellung, dh keine automatische Verdrahtung, und Sie sollten für die Verkabelung eine explizite Bean-Referenz verwenden. Sie haben für diese Verkabelung nichts Besonderes zu tun. Dies haben Sie bereits im Kapitel Abhängigkeitsinjektion gesehen. |
2 | namentlich Autowiring nach Eigenschaftsname. Federbehälter schaut auf die Eigenschaften der Bohnen auf dem autowire Attribut gesetzt ist byName in der XML - Konfigurationsdatei. Anschließend wird versucht, die Eigenschaften mit den gleichnamigen Beans in der Konfigurationsdatei abzugleichen und zu verknüpfen. |
3 | nach Typ Autowiring nach Eigenschaftsdatentyp. Federbehälter schaut auf die Eigenschaften der Bohnen auf dem autowire Attribut gesetzt ist byType in der XML - Konfigurationsdatei. Es versucht dann, eine Eigenschaft abzugleichen und zu verkabeln, wenn dies der Fall isttypestimmt mit genau einem der Beans-Namen in der Konfigurationsdatei überein. Wenn mehr als eine solche Beans vorhanden ist, wird eine schwerwiegende Ausnahme ausgelöst. |
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. |