logo

Automaattinen johdotus keväällä

Jousikehyksen automaattinen johdotusominaisuus mahdollistaa objektiriippuvuuden lisäämisen implisiittisesti. Se käyttää sisäisesti setteri- tai konstruktoriinjektiota.

Automaattista johdotusta ei voida käyttää primitiivi- ja merkkijonoarvojen lisäämiseen. Se toimii vain viitteellä.


Autowiringin etu

Se vaatii vähemmän koodia koska meidän ei tarvitse kirjoittaa koodia lisätäksemme riippuvuuden nimenomaisesti.


Autowiringin haitta

Ei ohjelmoijan hallintaa.

Sitä ei voi käyttää primitiivi- ja merkkijonoarvoille.


Automaattiset johdotustilat

On olemassa monia automaattisia johdotustiloja:

taulukon pituus java
Ei.tilaKuvaus
1)EiSe on oletusarvoinen automaattinen johdotustila. Se tarkoittaa, että oletuksena ei ole automaattista johdotusta.
2)nimeltäByName-tila lisää objektiriippuvuuden papun nimen mukaan. Tässä tapauksessa ominaisuuden nimen ja papun nimen on oltava sama. Se kutsuu sisäisesti setter-menetelmää.
3)Tyypin mukaanByType-tila lisää objektiriippuvuuden tyypin mukaan. Joten ominaisuuden nimi ja pavun nimi voivat olla erilaisia. Se kutsuu sisäisesti setter-menetelmää.
4)rakentajaKonstruktoritila lisää riippuvuuden kutsumalla luokan rakentajaa. Se kutsuu konstruktoria, jolla on suuri määrä parametreja.
5)automaattinen havainnointiSe on poistettu käytöstä keväästä 3 lähtien.

Esimerkki automaattisesta kytkennästä

Katsotaanpa yksinkertainen koodi automaattisen johdotuksen käyttöön keväällä. Sinun on käytettävä bean-elementin autowire-attribuuttia käyttääksesi autowire-tiloja.

 

Katsotaanpa täydellinen esimerkki automaattisesta kytkennästä keväällä. Tämän esimerkin luomiseksi olemme luoneet 4 tiedostoa.

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

Tämä luokka sisältää vain konstruktorin ja metodin.

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

Tämä luokka sisältää viittauksen B-luokkaan sekä konstruktoriin ja metodiin.

 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

Tämä luokka saa papun applicationContext.xml-tiedostosta ja kutsuu näyttömenetelmää.

 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(); } } 

Lähtö:

 b is created a is created hello a hello b 

1) byName automaattinen johdotustila

ByName-autojohdotustilassa paputunnuksen ja viitteen nimen on oltava samat.

Se käyttää sisäisesti setteriinjektiota.

 

Mutta jos muutat papun nimeä, se ei lisää riippuvuutta.

Katsotaanpa koodia, jossa muutamme papun nimen b:stä b1:ksi.

 

2) byType automaattinen johdotustila

ByType-automaattisessa johdotustilassa bean-tunnus ja viitenimi voivat olla erilaiset. Mutta tyyppiä saa olla vain yksi papu.

Se käyttää sisäisesti setteriinjektiota.

 

Tässä tapauksessa se toimii hyvin, koska olet luonut B-tyypin esiintymän. Ei ole väliä, että sinulla on eri papunimi kuin viitenimi.

Mutta jos sinulla on useita samantyyppisiä papuja, se ei toimi ja heittää poikkeuksen.

preg_match

Katsotaanpa koodia, jossa on monia B-tyypin papuja.

 

Siinä tapauksessa se tekee poikkeuksen.


3) rakentajan automaattinen johdotustila

Konstruktorin automaattisessa johdotustilassa jousisäiliö syöttää riippuvuuden korkeimman parametroidun konstruktorin mukaan.

Jos luokassa on 3 konstruktoria, zero-arg, one-arg ja two-arg, injektio suoritetaan kutsumalla kahden argin konstruktori.

 

4) ei automaattista johdotustilaa

Jos automaattijohdotusta ei ole, jousisäiliö ei lisää riippuvuutta automaattijohdotuksen avulla.