Met de Autowiring-functie van het Spring Framework kunt u de objectafhankelijkheid impliciet injecteren. Het maakt intern gebruik van setter- of constructor-injectie.
Autowiring kan niet worden gebruikt om primitieve waarden en tekenreekswaarden te injecteren. Het werkt alleen met referentie.
Voordeel van automatische bedrading
Het vereist de minder code omdat we de code niet hoeven te schrijven om de afhankelijkheid expliciet te injecteren.
Nadeel van automatische bedrading
Geen controle van programmeur.
Het kan niet worden gebruikt voor primitieve waarden en tekenreekswaarden.
Automatische bedradingsmodi
Er zijn veel automatische bedradingsmodi:
np.clip
Nee. | Modus | Beschrijving |
---|---|---|
1) | Nee | Dit is de standaard automatische bedradingsmodus. Dit betekent dat er standaard geen automatische bedrading is. |
2) | bij naam | De byName-modus injecteert de objectafhankelijkheid op basis van de naam van de boon. In dat geval moeten de eigenschapsnaam en de bonennaam hetzelfde zijn. Het roept intern de setter-methode aan. |
3) | op type | De byType-modus injecteert de objectafhankelijkheid op basis van type. De naam van de eigenschap en de naam van de boon kunnen dus verschillend zijn. Het roept intern de setter-methode aan. |
4) | bouwer | De constructormodus injecteert de afhankelijkheid door de constructor van de klasse aan te roepen. Het roept de constructor aan met een groot aantal parameters. |
5) | automatische detectie | Het is verouderd sinds voorjaar 3. |
Voorbeeld van automatische bedrading
Laten we eens kijken naar de eenvoudige code om autowiring in het voorjaar te gebruiken. U moet het autowire-attribuut van het bean-element gebruiken om de autowire-modi toe te passen.
Laten we het volledige voorbeeld van automatische bedrading in het voorjaar bekijken. Om dit voorbeeld te maken, hebben we 4 bestanden gemaakt.
- B.java
- A.java
- applicationContext.xml
- Test.java
Deze klasse bevat alleen een constructor en een methode.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Deze klasse bevat verwijzingen naar klasse B, constructor en methode.
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
Deze klasse haalt de bean op uit het bestand applicationContext.xml en roept de weergavemethode aan.
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(); } }
Uitgang:
b is created a is created hello a hello b
1) automatische bedradingsmodus op naam
In het geval van de automatische bedradingsmodus byName moeten de bean-ID en de referentienaam hetzelfde zijn.
Het maakt intern gebruik van setterinjectie.
data structuur
Maar als u de naam van de boon verandert, wordt de afhankelijkheid niet geïnjecteerd.
Laten we de code bekijken waarin we de naam van de boon veranderen van b in b1.
2) automatische bedradingsmodus op type
In het geval van de byType autowiring-modus kunnen de bean-ID en de referentienaam verschillen. Maar er mag slechts één boon van een type zijn.
Het maakt intern gebruik van setterinjectie.
In dit geval werkt het prima omdat u een exemplaar van het B-type hebt gemaakt. Het maakt niet uit dat u een andere bonennaam heeft dan de referentienaam.
Maar als je meerdere bonen van één type hebt, zal het niet werken en een uitzondering genereren.
Laten we eens kijken naar de code waar veel bonen van het type B zijn.
In dat geval zal het een uitzondering genereren.
3) Autowiring-modus van de constructor
In het geval van de automatische bedradingsmodus van de constructor, injecteert Spring Container de afhankelijkheid van de constructor met de hoogste parameters.
Als je drie constructors in een klasse hebt, nul-arg, één-arg en twee-arg, dan wordt injectie uitgevoerd door de twee-arg-constructor aan te roepen.
4) geen automatische bedradingsmodus
Als er geen automatische bedradingsmodus is, injecteert de veercontainer de afhankelijkheid niet door automatische bedrading.