Vorwort
In der normalen Java -Entwicklung müssen sich Programmierer in einer bestimmten Klasse auf andere Klassen verlassen, sodass sie normalerweise new Klasse für eine neue Klasse verwenden und dann Klasseninstanzen aufrufen. Das Problem bei dieser Entwicklung ist, dass new Klasseninstanzen nicht einfach zu verwalten sind. Spring schlägt die Idee der Abhängigkeitsinjektion vor, dh Abhängigkeitsklassen werden von Programmierern nicht instanziiert, sondern helfen uns, Instanzen durch Federcontainer new und Instanzen in die Klasse zu injizieren, die das Objekt benötigt. Ein weiterer Begriff für die Abhängigkeitsinjektion ist "Kontrollinversion". Das gemeinsame Verständnis ist: Normalerweise haben wir eine new Instanz, und die Kontrolle dieser Instanz ist unser Programmierer, und die Kontrolle der Inversion bedeutet, dass die Arbeit der new Instanz nicht von US -Programmierern durchgeführt wird, sondern dem Federbehälter übergeben wird.
Es gibt vier Möglichkeiten, Abhängigkeiten im Frühjahr zu injizieren
1. Setzen Sie die Injektion (normalerweise auch als Attributinjektion bezeichnet)
2. Konstruktorinjektion
3. Schnittstelleninjektion (dies wird im Grunde genommen nicht verwendet)
4. Annotationsinjektion (@autowire)
Im Folgenden finden Sie ein Beispiel für die Verwendung der Set -Methodeninjektion, der Konstruktorinjektion und der Annotationsinjektion.
1. Setzen Sie die Methodeninjektion (Attributinjektion)
Userdao.java
public class userdao {public void InsertUser (Benutzerbenutzer) {// Spezifische Logik weggelassen}}UserService.java
öffentliche Schnittstelle UserService {void InsertUser (Benutzerbenutzer);}UserServiceImpl.java
öffentliche Klasse UserServiceImpl implementiert UserService {private userDao userDao; public void setUserdao (userDao userDao) {this.userdao = userDao; } public void InsertUser (Benutzerbenutzer) {userDao.insert (Benutzer); }}Federkonfigurationsdatei
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans-ban- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!--Omit some unrelated configuration writing--> <bean id="userDao"></bean> <bean id="userService"> <property name = "userDao" ref = "userDao"> </bean> </beans>
Das obige kann Userdao in ter UserServiceImplin einbringen
2. Konstruktorinjektion
User.java
öffentliche Klasse User {// für den Einfachheit halber zwei Attribute private Zeichenfolge schreiben; privates Ganzzahlalter; // Die Getter/Setter -Methode über den Namen, den alter öffentlichen Benutzer (String -Name, int age) {this.name = name; this.age = Alter; }}Verwenden Sie nun die Feder -Konfigurationsdatei, um das Benutzerobjekt zu injizieren
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans-ban- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-omit einige nicht verwandte Konfigurationsschreiben-> <Bean id =" uswan ". Gleiche Anzahl von Parametern)-> <Constructor-Arg type = "java.lang.String" index = "0" value = "zhangsan"/> <constructor-arg type = "java.lang.Integer" indeger "1" 1 "value =" 20> </bean> </beans> </beans>
Das obige kann Eigenschaftswerte in das Benutzerobjekt injizieren. Wenn Sie das Beispiel mit der festgelegten Methode injizieren möchten, ist es natürlich tatsächlich dasselbe. Es ist notwendig, einen Konstruktor in UserServiceImpl zu haben, und die formalen Parameter sind UserDao, sodass keine setter -Methode erforderlich ist.
Dann sollte das Schreiben der Federkonfigurationsdatei geändert werden
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans-ban- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-omit eine ungehinderte Konfiguration-> uswan id =" userdao! von Konstruktorparametern beginnt von 0 (vermeiden Sie mehrere Konstruktoren mit der gleichen Anzahl von Parametern)-> <Constructor-Arg Index = "0" Ref = "UserDao"> </bean> </beans>
Dies kann auch den Effekt erzielen, der durch die oben genannte Injektion der festgelegten Methode erzielt wird
3. Annotationsinjektion
Ich habe nie versucht, ob es erfolgreich @Autowire werden kann, ohne @Component,@Service,@Controller usw. zu diesen Klassen hinzuzufügen. Es wird jedoch empfohlen, der entsprechenden Ebene entsprechende Anmerkungen hinzuzufügen. Im folgenden Beispiel gehört UserDao zur Modul -Ebene. Im Frühjahr können Sie @Component Annotation verwenden.
Userdao.java
@ComponentPublic Class UserDao {public void InsertUser (Benutzerbenutzer) {// Spezifische Logik weggelassen}}UserService.java
öffentliche Schnittstelle UserService {void InsertUser (Benutzerbenutzer);}UserServiceImpl.java
// Einführung des entsprechenden Spring -Pakets @ServicePublic Class UserServiceImpl implementiert UserService {@autowire private userDao userDao; public void InsertUser (Benutzerbenutzer) {userDao.insert (Benutzer); }}Die entsprechende Konfigurationsdatei von Spring
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframe.org/schema/beans-ban- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd "> <!-Verwenden Sie ein unglückliches Schreiben von Konfigurationen-> <!-*, um alle Pakete zu scannen. In der tatsächlichen Entwicklung können Sie basierend auf Paketen mit Annotationskomponenten scannen-> <Kontext: Komponenten-scan-Basis-Package = "*"> <!-Einschalten des Komponenten-Scans-> </context: component-scan> <context: Annotation-config> <!-Turn-On-Annotationsprozessor-> </context: Annotation-config> <boan id ID = "UserService"/> </beans>
Während des Entwicklungsprozesses ist die festgelegte Methodeninjektion jedoch aktiviert und die Annotationsinjektion aktiviert, die Feder wählt zunächst die festgelegte Injektion aus, sodass sie nicht vergisst, die entsprechende Mengenmethode bereitzustellen, andernfalls schlägt sie fehl.
Im Vergleich ist die Annotationsinjektion viel bequemer als die anderen Injektionen, und weniger Code- und Konfigurationsdateien werden geschrieben. Es wird empfohlen, eine Annotationsinjektion während des Entwicklungsprozesses zu verwenden.
Zusammenfassen
Die oben genannte ist eine vollständige Einführung in verschiedene Methoden zur Abhängigkeitsinjektion im Frühjahr. Ich hoffe, es kann Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen. Wenn Sie Fragen haben, können Sie auch eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.