logo

Autovadu pieslēgšana pavasarī

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žīmsApraksts
1)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ārdaByName 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 tipaByType 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)konstruktorsKonstruktora režīms ievada atkarību, izsaucot klases konstruktoru. Tas izsauc konstruktoru ar lielu parametru skaitu.
5)automātiski noteiktTā 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.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.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.