logo

Автоматично окабеляване през пролетта

Функцията за автоматично свързване на пружинната рамка ви позволява да инжектирате имплицитно зависимостта на обекта. Вътрешно използва сетер или инжекция на конструктор.

Autowiring не може да се използва за инжектиране на примитивни и низови стойности. Работи само с препратка.


Предимство на автоматичното окабеляване

Това изисква по-малко код защото не е необходимо да пишем кода, за да инжектираме изрично зависимостта.


Недостатък на автоматичното окабеляване

Без контрол на програмиста.

Не може да се използва за примитивни и низови стойности.


Режими на автоматично окабеляване

Има много режими на автоматично окабеляване:

кой е фреди меркюри
Не.РежимОписание
1)НеТова е режимът на автоматично свързване по подразбиране. Това означава, че няма автоматично окабеляване по подразбиране.
2)по имеРежимът 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

Този клас получава компонента от файла 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) режим на автоматично окабеляване по име

В случай на режим на автоматично окабеляване по име, идентификаторът на bean и референтното име трябва да са еднакви.

Вътрешно използва инжектиране на сетер.

 

Но ако промените името на bean, това няма да инжектира зависимостта.

Нека да видим кода, където променяме името на bean от b на b1.

 

2) режим на автоматично окабеляване по тип

В случай на режим на автоматично окабеляване byType, идентификаторът на bean и референтното име може да са различни. Но трябва да има само едно зърно от един вид.

Вътрешно използва инжектиране на сетер.

 

В този случай работи добре, защото сте създали екземпляр от тип B. Няма значение, че имате различно име на bean от референтното име.

Но ако имате множество bean от един тип, той няма да работи и ще хвърли изключение.

изключете режима за програмисти

Нека да видим кода, където има много зърна от тип B.

 

В такъв случай ще хвърли изключение.


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

В случай на режим на автоматично свързване на конструктора, пружинният контейнер инжектира зависимостта от най-високо параметризирания конструктор.

Ако имате 3 конструктора в клас, zero-arg, one-arg и two-arg, тогава инжектирането ще се извърши чрез извикване на конструктора с два аргумента.

 

4) без режим на автоматично окабеляване

В случай на липса на режим на автоматично свързване, пружинният контейнер не инжектира зависимостта чрез автоматично свързване.