A rugós keret automatikus huzalozási funkciója lehetővé teszi az objektumfüggőség implicit beillesztését. Belsőleg setter vagy konstruktor injekciót használ.
Az automatikus vezetékezés nem használható primitív és karakterlánc-értékek beszúrására. Csak referenciával működik.
Az Autowiring előnyei
Megköveteli a kevesebb kódot mert nem kell megírnunk a kódot a függőség explicit beillesztéséhez.
Az Autowiring hátránya
Nincs irányítás a programozó felett.
Nem használható primitív és karakterlánc-értékekhez.
Automatikus bekötési módok
Számos automatikus bekötési mód létezik:
számtani logikai egység
Nem. | Mód | Leírás |
---|---|---|
1) | Nem | Ez az alapértelmezett automatikus bekötési mód. Ez azt jelenti, hogy alapértelmezés szerint nincs automatikus vezetékezés. |
2) | név szerint | A byName mód a komponens nevének megfelelően beadja az objektumfüggőséget. Ebben az esetben a tulajdonságnévnek és a bab nevének meg kell egyeznie. Belsőleg hívja a setter metódust. |
3) | byType | A byType mód a típusnak megfelelően beadja az objektumfüggőséget. Tehát a tulajdonságnév és a babnév eltérő lehet. Belsőleg hívja a setter metódust. |
4) | konstruktőr | A konstruktor mód az osztály konstruktorának meghívásával adja be a függőséget. Meghívja a nagyszámú paraméterrel rendelkező konstruktort. |
5) | Auto felismerés | Tavasz 3-a óta elavult. |
Példa az automatikus vezetékezésre
Lássuk az egyszerű kódot az automatikus vezetékezés használatához tavasszal. Az autowire módok alkalmazásához a komponens elem autowire attribútuma szükséges.
Lássuk az automatikus vezetékezés teljes példáját tavasszal. A példa létrehozásához 4 fájlt hoztunk létre.
- B.java
- A.java
- applicationContext.xml
- Test.java
Ez az osztály csak konstruktort és metódust tartalmaz.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Ez az osztály tartalmazza a B osztály hivatkozását, valamint a konstruktort és a metódust.
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
Ez az osztály az applicationContext.xml fájlból szerzi be a komponenst, és meghívja a megjelenítési metódust.
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(); } }
Kimenet:
b is created a is created hello a hello b
1) byName automatikus bekötési mód
ByName automatikus huzalozási mód esetén a komponens azonosítójának és a referencianévnek meg kell egyeznie.
Belsőleg setter injekciót használ.
100 kmh-tól mph-ig
De ha megváltoztatja a bab nevét, az nem szúrja be a függőséget.
Lássuk a kódot, ahol a bab nevét b-ről b1-re változtatjuk.
2) ByType autowiring mód
ByType automatikus huzalozási mód esetén a komponens azonosítója és a referencianév eltérhet. De egy fajtából csak egy bab lehet.
Belsőleg setter injekciót használ.
Ebben az esetben jól működik, mert létrehozott egy B típusú példányt. Nem számít, hogy a bab neve más, mint a referencianév.
De ha több egy típusú babja van, az nem fog működni, és kivételt dob.
Lássuk a kódot, ahol sok B típusú bab található.
Ebben az esetben kivételt tesz.
3) konstruktor automatikus bekötési mód
Konstruktor autowiring mód esetén a rugós konténer a legmagasabb paraméterű konstruktorral adja be a függőséget.
Ha egy osztályban 3 konstruktor van, nulla arg, egy arg és két arg, akkor az injekció a két arg konstruktor meghívásával történik.
4) nincs automatikus bekötési mód
Ha nincs automatikus bekötési mód, a rugós konténer nem adja be a függőséget automatikus bekötéssel.