Atsperu karkasa automātiskās vadu funkcija ļauj netieši ievadīt objekta atkarību. Tajā iekšēji tiek izmantota iestatītāja vai konstruktora injekcija.
Autovadu savienojumu nevar izmantot, lai ievadītu primitīvas un virknes vērtības. Tas darbojas tikai ar atsauci.
Autowiring priekšrocības
Tas prasa mazāk koda jo mums nav jāraksta kods, lai skaidri ievadītu atkarību.
Autowiring trūkums
Nav programmētāja kontroles.
To nevar izmantot primitīvām un virkņu vērtībām.
Autovadu režīmi
Ir daudz automātiskās savienošanas režīmu:
skaits atšķiras
Nē. | Režīms | Apraksts |
---|---|---|
1) | Nē | Tas ir noklusējuma automātiskās vadu režīms. Tas nozīmē, ka pēc noklusējuma nav automātiskās elektroinstalācijas. |
2) | pēc Vārda | ByName režīms ievada objekta atkarību atbilstoši pupiņas nosaukumam. Šādā gadījumā īpašuma nosaukumam un pupiņas nosaukumam ir jābūt vienādam. Tā iekšēji izsauc iestatītāja metodi. |
3) | pēc tipa | ByType režīms ievada objekta atkarību atbilstoši tipam. Tātad īpašuma nosaukums un pupiņas nosaukums var atšķirties. Tā iekšēji izsauc iestatītāja metodi. |
4) | konstruktors | Konstruktora režīms ievada atkarību, izsaucot klases konstruktoru. Tas izsauc konstruktoru ar lielu parametru skaitu. |
5) | automātiski noteikt | Tā darbība ir pārtraukta kopš 3. pavasara. |
Autovadu pieslēguma piemērs
Apskatīsim vienkāršo kodu automātiskās vadu izmantošanai pavasarī. Lai lietotu automātiskās vadu režīmus, ir jāizmanto pupiņu elementa atribūts autowire.
Apskatīsim pilnu automātiskās elektroinstalācijas piemēru pavasarī. Lai izveidotu šo piemēru, esam izveidojuši 4 failus.
- B.java
- A.java
- applicationContext.xml
- Test.java
Šajā klasē ir tikai konstruktors un metode.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Šajā klasē ir atsauce uz B klasi un konstruktoru un metodi.
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
Šī klase iegūst pupiņu no faila applicationContext.xml un izsauc displeja metodi.
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(); } }
Izvade:
b is created a is created hello a hello b
1) byName automātiskās vadu režīms
ByName automātiskās vadu režīma gadījumā pupiņu ID un atsauces nosaukumam ir jābūt vienādam.
Tajā iekšēji tiek izmantota iestatītāja injekcija.
Bet, ja maināt pupiņas nosaukumu, tas neinjicēs atkarību.
Apskatīsim kodu, kurā mēs mainām pupiņas nosaukumu no b uz b1.
2) byType automātiskās vadu režīms
ByType automātiskās vadu režīma gadījumā pupiņu ID un atsauces nosaukums var atšķirties. Bet viena veida pupiņām jābūt tikai vienai.
virkne tērzēšanai
Tajā iekšēji tiek izmantota iestatītāja injekcija.
Šajā gadījumā tas darbojas labi, jo esat izveidojis B tipa gadījumu. Nav nozīmes tam, ka pupiņu nosaukums atšķiras no atsauces nosaukuma.
Bet, ja jums ir vairākas viena veida pupiņas, tas nedarbosies un izmetīs izņēmumu.
Apskatīsim kodu, kurā ir daudz B tipa pupiņu.
Tādā gadījumā tas radīs izņēmumu.
3) konstruktora autovadu režīms
Konstruktora automātiskās vadu režīma gadījumā atsperu konteiners ievada atkarību no konstruktora ar visaugstākajiem parametriem.
Ja klasē ir 3 konstruktori, nulles arg, viena arg un divu arg, tad injekcija tiks veikta, izsaucot divu arg konstruktoru.
4) nav automātiskās vadu režīma
Ja nav automātiskās vadu režīma, atsperes konteiners neinjicē atkarību, izmantojot automātisko vadu.