logo

Automatikus bekötés tavasszal

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ódLeírás
1)NemEz 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 szerintA 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)byTypeA 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őrA 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ésTavasz 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.

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