Функција аутоматског повезивања Спринг фрамеворк-а вам омогућава да имплицитно убаците зависност објекта. Интерно користи убризгавање сетера или конструктора.
Аутоматско ожичење се не може користити за убацивање примитивних и стринг вредности. Ради само са референцом.
Предност аутоматског ожичења
То захтева мање кода јер не треба да пишемо код да бисмо експлицитно убацили зависност.
Недостатак аутоматског ожичења
Нема контроле програмера.
Не може се користити за примитивне и стринг вредности.
Режими аутоматског ожичења
Постоји много режима аутоматског ожичења:
зеенат аман глумац
Не. | Моде | Опис |
---|---|---|
1) | Не | То је подразумевани режим аутоматског ожичења. То значи да нема аутоматског ожичења по подразумеваној вредности. |
2) | поименце | Режим биНаме убацује зависност објекта према имену беан-а. У том случају, име својства и име беан-а морају бити исти. Интерно позива метод постављања. |
3) | биТипе | Режим биТипе убацује зависност објекта према типу. Дакле, име својства и име беан-а могу бити различити. Интерно позива метод постављања. |
4) | конструктор | Режим конструктора убацује зависност позивањем конструктора класе. Позива конструктор који има велики број параметара. |
5) | аутодетецт | Застарео је од пролећа 3. |
Пример аутоматског ожичења
Хајде да видимо једноставан код за коришћење аутоматског ожичења у пролеће. Морате да користите атрибут аутовире елемента беан да бисте применили режиме аутовире.
Погледајмо комплетан пример аутоматског ожичења у пролеће. Да бисмо креирали овај пример, направили смо 4 датотеке.
- Б.јава
- А.јава
- апплицатионЦонтект.кмл
- Тест.јава
Ова класа садржи само конструктор и метод.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello 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(); } }апплицатионЦонтект.кмл
Тест.јава
Ова класа добија беан из датотеке апплицатионЦонтект.кмл и позива метод приказа.
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) биНаме режим аутоматског ожичења
У случају аутоматског ожичења по имену, ИД беан-а и референтно име морају бити исти.
Интерно користи ињекцију сетера.
турбо ц++ преузимање
Али, ако промените име беан-а, он неће убацити зависност.
Хајде да видимо код где мењамо име бина из б у б1.
2) биТипе режим аутоматског ожичења
У случају режима аутоматског ожичења биТипе, ИД беан-а и референтно име могу да се разликују. Али мора постојати само једно зрно врсте.
Интерно користи ињекцију сетера.
У овом случају, ради добро јер сте креирали инстанцу типа Б. Није важно што имате другачије име пасуља од референтног.
Али, ако имате више беан-ова једног типа, то неће радити и избацити изузетак.
Хајде да видимо код где је много пасуља типа Б.
У том случају, избациће изузетак.
3) режим аутоматског ожичења конструктора
У случају аутоматског ожичења конструктора, контејнер са опругом убризгава зависност од највише параметризованог конструктора.
Ако имате 3 конструктора у класи, нула-арг, један-арг и два-арг, онда ће се ињекција извршити позивањем конструктора са два аргумента.
4) нема режима аутоматског ожичења
У случају да нема режима аутоматског ожичења, опружни контејнер не убризгава зависност аутоматским ожичењем.