logo

Автопроводка навесні

Функція автоматичного з’єднання Spring Framework дає змогу неявно вводити залежність об’єкта. Він внутрішньо використовує ін'єкцію сетера або конструктора.

Autowiring не можна використовувати для введення примітивних і рядкових значень. Він працює лише з посиланням.


Перевага автопроводки

Це вимагає менше коду оскільки нам не потрібно писати код для явного впровадження залежності.


Недолік автопроводки

Немає контролю програміста.

Його не можна використовувати для простих і рядкових значень.


Режими авторозводки

Існує багато режимів авторозводки:

пошукова система та приклади
Немає.Режимопис
1)НемаєЦе режим автоматичного підключення за замовчуванням. Це означає відсутність автоматичного підключення за замовчуванням.
2)byNameРежим byName вводить залежність об’єкта відповідно до назви компонента. У такому випадку ім’я властивості та ім’я компонента мають бути однаковими. Він внутрішньо викликає метод налаштування.
3)за типомРежим byType вводить залежність об’єкта відповідно до типу. Отже, ім’я властивості та ім’я компонента можуть відрізнятися. Він внутрішньо викликає метод налаштування.
4)конструкторРежим конструктора вводить залежність шляхом виклику конструктора класу. Викликає конструктор з великою кількістю параметрів.
5)автовизначенняЗ весни 3 він не підтримується.

Приклад автопроводки

Давайте подивимося простий код для використання автоматичного підключення навесні. Вам потрібно використовувати атрибут autowire елемента bean, щоб застосувати режими autowire.

 

Дивимося повний приклад автопроводки навесні. Щоб створити цей приклад, ми створили 4 файли.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.java

Цей клас містить лише конструктор і метод.

 package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} } 
A.java

Цей клас містить посилання на клас B, конструктор і метод.

 package org.sssit; public class A { B b; A(){System.out.println('a is created');} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println('hello a');} void display(){ print(); b.print(); } } 
applicationContext.xml
 
Test.java

Цей клас отримує bean-компонент із файлу applicationContext.xml і викликає метод відображення.

 package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext('applicationContext.xml'); A a=context.getBean('a',A.class); a.display(); } } 

Вихід:

 b is created a is created hello a hello b 

1) режим авторозводки за назвою

У випадку режиму автоматичного з’єднання byName ідентифікатор bean-компонента та ім’я посилання мають бути однаковими.

Він внутрішньо використовує ін'єкцію сеттера.

 

Але, якщо ви зміните назву bean-компонента, це не впровадить залежність.

Давайте подивимося на код, у якому ми змінюємо ім’я біна з b на b1.

 

2) режим автоматичної розводки за типом

У разі режиму автоматичного підключення byType ідентифікатор bean-компонента та ім’я посилання можуть відрізнятися. Але має бути тільки один біб типу.

Він внутрішньо використовує ін'єкцію сеттера.

 

У цьому випадку це працює добре, оскільки ви створили екземпляр типу B. Немає значення, що у вас ім’я bean-компонента відрізняється від еталонного імені.

Але, якщо у вас є кілька bean-компонентів одного типу, це не працюватиме та викличе виключення.

java switch int

Давайте подивимося на код, де багато bean типу B.

 

У такому випадку буде видано виняток.


3) режим авторозводки конструктора

У разі режиму автоматичного підключення конструктора, контейнер spring вводить залежність найвищим параметризованим конструктором.

Якщо у вас є 3 конструктори в класі, з нульовим аргументом, з одним аргументом і з двома аргументами, тоді впровадження буде виконано шляхом виклику конструктора з двома аргументами.

 

4) немає режиму авторозводки

У разі відсутності режиму автоматичного з’єднання пружинний контейнер не вводить залежність за допомогою автоматичного з’єднання.