Konfigurationsdatei
In den vorherigen Beispielen haben wir die XML -Bean -Definition verwendet, um Komponenten zu konfigurieren. In einem etwas größeren Projekt gibt es normalerweise Hunderte von Komponenten. Wenn diese Komponenten mithilfe von XML -Bean -Definitionen konfiguriert werden, erhöht dies offensichtlich die Größe der Konfigurationsdatei, sodass es nicht sehr bequem ist, zu finden und zu warten.
Feder 2.5 führt einen automatischen Komponenten -Scanmechanismus für uns vor. Es finden Sie Klassen, die mit @Component, @Service, @Controller und @Repository -Anmerkungen unter dem Klassenpfad kommentiert sind, und integrieren diese Klassen in den Frühlingscontainer, um sie zu verwalten.
Die Funktion ist die gleiche wie die Verwendung von Bean -Knotenkonfigurationskomponenten in XML -Dateien. Um den automatischen Scanmechanismus zu verwenden, müssen wir die folgenden Konfigurationsinformationen öffnen:
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springramework.org/schema/beans/bean- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <context: component-scan-package ="
Der <context:component-scan base-package="cn.itcast" /> registriert implizit mehrere Prozessoren, die Annotationen analysieren, einschließlich des mit der Konfiguration registrierten <context: Annotation-Config /-prozessor, dh, wenn <context:component-scan base-package="cn.itcast" /> <context:annotation-config/> Konfiguration. Darüber hinaus ist das Basispackage ein Paket (Unterpackung), das gescannt werden muss.
Anmerkung
@Service wird verwendet, um die Business -Layer -Komponenten zu kommentieren, @Controller wird verwendet, um die Kontrollschichtkomponenten (z. B. die Aktion in Struts2) zu kommentieren, und @Repository wird verwendet, um die Datenzugriffskomponente, dh die DAO -Komponente, zu kommentieren. @Component bezieht sich auf Komponenten. Wenn Komponenten nicht einfach zu klassifizieren sind, können wir diese Annotation verwenden, um zu kommentieren.
Dieser Artikel basiert auf dem Fall von @autowire Annotation und automatischer Montage.
Wir ändern zunächst die Konfigurationsdatei von Spring in:
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springramework.org/schema/beans/bean- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <context: component-scan-package ="
Ein Beispiel
Verwenden Sie dann @Service Annotation, um die personsservicebean -Klasse wie folgt zu kommentieren:
@ServicePublic Class personSserviceBean implementiert personSservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void Save () {persondao.add (); }}Annotieren Sie die Persondaobean -Klasse mit @Repository Annotation wie folgt:
@RepositoryPublic Class Persondaobean implementiert PERONDAO {@Override public void add () {System.out.println ("die Methode add () in persondaobean ausführen"); }}Schließlich ändern wir den Code der Springtest -Klasse an:
public class SpringTest {@test public void Instancesspring () {AbstractApplicationContext ctx = new classPathXMLApplicationContext ("beans.xml"); PersonSservice pelsonservice = (personSservice) ctx.getbean ("personSservicebean"); Persondao persondao = (persondao) ctx.getbean ("persondaobean"); System.out.println (personSservice); System.out.println (persondao); ctx.close (); }}Testen Sie die Instancesspring () -Methode, und Sie können sehen, dass die Eclipse -Konsole druckt:
Wenn wir den angegebenen Namen verwenden möchten, um ihn zu erhalten, können wir den Code der PersonServiceBean -Klasse ändern, um:
@Service ("personSservice") öffentliche Klasse personalServiceBean implementiert personSservice (private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void Save () {persondao.add (); }}Auf diese Weise sollte der Code der SpringTest -Klasse geändert werden in:
public class SpringTest {@test public void Instancesspring () {AbstractApplicationContext ctx = new classPathXMLApplicationContext ("beans.xml"); PersonSservice personSservice = (personSservice) ctx.getbean ("personSservice"); System.out.println (personSservice); ctx.close (); }}Testen Sie die Instancesspring () -Methode, und Sie können sehen, dass die Eclipse -Konsole druckt:
Wir haben zuvor den Umfang der Frühlingsbohnen gelernt, und wir können wissen, dass der Umfang der beiden mit Frühling verwalteten Bohnen oben standardmäßig Singleton ist. Natürlich können wir auch den Umfang der Frühlingsbeamten ändern, z.
@Service ("personSservice") @Scope ("Prototyp") öffentliche Klasse personSservicebean implementiert personsservice {private persondao persondao; public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void Save () {persondao.add (); }}Dies bedeutet, dass der vom Frühling verwaltete Umfang der Personalservicebean zu einem Prototyp geworden ist. Zu diesem Zeitpunkt ändern wir den Code der Springtest -Klasse an:
public class SpringTest {@test public void Instancesspring () {AbstractApplicationContext ctx = new classPathXMLApplicationContext ("beans.xml"); PersonSservice personSservice1 = (personSservice) ctx.getbean ("personSservice"); PersonSservice pelsonservice2 = (personSservice) ctx.getbean ("personSservice"); System.out.println (personSservice1 == personSservice2); ctx.close (); }}Testen Sie die Instancesspring () -Methode, und Sie können sehen, dass die Eclipse -Konsole druckt:
Prototypenumfang bedeutet, dass jedes Mal, wenn Sie eine Bohne von einem Federbehälter erhalten, ein neues Objekt ist.
Wenn Komponenten im Federcontainer enthalten sind, indem automatisch unter dem Klassenpfad gescannt wird, wie Sie die Initialisierungsmethode und Zerstörungsmethode der Bean angeben? Zu diesem Zeitpunkt müssen wir zwei Anmerkungen verwenden: @Postconstruct und @Predestroy. Für das Experimentieren haben wir den Code der PERSONDERSIVICEBEAN -Klasse an:
@Service ("personSservice") öffentliche Klasse personalServiceBean implementiert personSservice (private persondao persondao; @Postconstruct public void init () {System.out.println ("Ressource initialisieren"); } @Predestroy public void Destroy () {System.out.println ("zerstören, Ressource schließen"); } public void setpersondao (persondao persondao) {this.persondao = persondao; } @Override public void Save () {persondao.add (); }}Als nächstes müssen wir den Code der SpringTest -Klasse ändern, um:
public class SpringTest {@test public void Instancesspring () {AbstractApplicationContext ctx = new classPathXMLApplicationContext ("beans.xml"); PersonSservice personSservice = (personSservice) ctx.getbean ("personSservice"); ctx.close (); }}Testen Sie auf diese Weise die Methode Instancesspring (), und die Eclipse -Konsole wird gedruckt:
Um den Quellcode anzuzeigen, klicken Sie auf, um die Feder automatisch zu den zum Herunterladen von Bohnen zu scannen und zu verwalten.
Zusammenfassen
Das obige ist das vom Editor eingeführte automatische Spring -Scan -Paket. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!