Весна - автоподключение фасоли
Вы узнали, как объявлять bean-компоненты с помощью элемента <bean> и вставлять <bean> с помощью элементов <constructor-arg> и <property> в файле конфигурации XML.
Контейнер Spring может autowire отношения между взаимодействующими компонентами без использования элементов <constructor-arg> и <property>, что помогает сократить объем XML-конфигурации, которую вы пишете для большого приложения на основе Spring.
Режимы автоматического подключения
Ниже приведены режимы автоматического подключения, которые можно использовать для указания контейнеру Spring использовать автоматическое подключение для внедрения зависимостей. Вы используете атрибут autowire элемента <bean />, чтобы указатьautowire режим для определения bean.
Старший Нет | Режим и описание |
---|---|
1 | no Это настройка по умолчанию, что означает отсутствие автоматического подключения, и вы должны использовать явную ссылку на компонент для подключения. Вам нечего делать с этой проводкой. Это то, что вы уже видели в главе «Внедрение зависимостей». |
2 | по имени Автоподключение по названию собственности. Контейнер Spring смотрит на свойства bean-компонентов, для которых атрибут autowire установлен на byName в файле конфигурации XML. Затем он пытается сопоставить и связать свои свойства с bean-компонентами, определенными с теми же именами в файле конфигурации. |
3 | byType Автономное подключение по типу данных свойства. Контейнер Spring смотрит на свойства bean-компонентов, для которых атрибут autowire установлен на byType в файле конфигурации XML. Затем он пытается сопоставить и подключить свойство, если егоtypeсовпадает точно с одним из имен beans в файле конфигурации. Если существует более одного такого 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. |