Vorwort
Javaconfig erwies sich als Subprojekt des Frühlings. Es bietet Bean -Definitionsinformationen über Java -Kurse. In der Spring4 -Version ist Javaconfig offiziell zur Kernfunktion von Spring4 geworden.
In diesem Artikel werden im Frühling die relevanten Inhalte zur Konfiguration basierend auf Java -Klassen ausführlich vorgestellt. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung gemeinsam an.
1 Definition Bean
Gewöhnliches Pojo kann Bean -Definitionsinformationen für Frühlingscontainer bereitstellen, solange die @Configuration -Annotation gekennzeichnet ist.
@ConfigurationPublic Class SystemConfig { / ** * Definieren Sie die Bean und Instantiate * * @return * / @Bean public userDao userDao () {return New UserDao (); } @Bean public Deptdao deptdao () {return New Deptdao (); } / ** * Definieren Sie den UserService und injizieren Sie den zuvor definierten UserDao und Deptdao * * @return * / @Bean Public UserService userService () {UserService Service = new UserService (); service.setUserdao (userDao ()); service.setDeptdao (Deptdao ()); Rückgabeservice; }}Die Methode dieser Klasse wird durch die @Bean -Annotation kommentiert, dh die Definition der Bohne. Der Typ der Bean wird durch den Typ des Methodenrückgabewerts bestimmt. Der Name steht standardmäßig zum Methodennamen und dem Methodennamen. Sie können auch den Bean -Namen angeben, indem Sie den Parameter wie @Bean (name = ”xxx”) eingeben. Die von @Bean gekennzeichnete Methodenkörper liefert die Logik, um die Bohne zu instanziieren.
Die obige Konfiguration entspricht dem folgenden XML:
<bean id = "userdao"/> <bean id = "deptdao"/> <bean id = "userService" p: userDao-ref = "userdao" p: Deptdao-ref = "Deptdao"/>
Im Vergleich zu der Konfigurationsmethode basierend auf Java -Klassen, die auf XML- oder Annotations -basierter Konfigurationsmethode basiert - -
Da die @Configuration Annotation -Klasse selbst @Component hat, können diese Klassen in andere Bohnen wie gewöhnliche Bohnen injiziert werden.
@ConfigurationPublic Class ApplicationConfig {@autowired Private SystemConfig SystemConfig; @Bean öffentlicher BehördeService AuthorityService () {AuthorityService Service = New AuthorityService (); service.setUserdao (SystemConfig.Userdao ()); service.setDeptdao (SystemConfig.Deptdao ()); Rückgabeservice; }}Spring verwendet eine AOP -Verbesserung für alle Methoden, die in der Konfigurationsklasse @Bean gekennzeichnet sind, und führt die Lebenszyklus -Management -Logik der Bean ein. Beispielsweise gibt es Systemconfig.userdao () oben ein Singleton zurück, das der Bohne entspricht.
In @Bean können wir auch den Umfang der Bean kontrollieren, indem wir die @Scope -Annotation annotieren:
@Scope ("Prototyp")@beanpublic Deptdao Deptdao () {return New Deptdao ();};Auf diese Weise gibt jeder Aufruf zur DEPTDAO () -Methode eine neue Instanz zurück:
AssertnotSame (AuthorityService.getDeptdao (). HashCode (), AuthorityService.getDeptdao (). HashCode ());
HINWEIS: Verwenden Sie Java-basierte Klassen für Konfiguration, Frühlings-AOP- und CGGLIB-Bibliotheken müssen in den Klassenpfad enthalten sein.
2 Starten Sie den Federbehälter
2.1 Verwenden Sie nur die @Configuration -Klasse
Sie können den Konstruktor der AnnotationConfigapplicationContext -Klasse verwenden, um die Java -Klasse zu übergeben, die @Configuration markiert, um den Federbehälter zu starten.
ApplicationContext context = new AnnotationConFigApplicationContext (SystemConfig.class); UserService UserService = (UserService) context.getBean ("UserService");Wenn es mehrere @Configuration -Konfigurationsklassen gibt, können Sie diese im AnnotationConfigApplicationContext registrieren und diese Konfigurationsklassen dann durch Aktualisieren des Containers anwenden:
AnnotationConFigApplicationContext context = new AnnotationConFigApplicationContext (); // Registrieren Sie mehrere Konfigurationsklassen kontext.register (Systemconfig.class); context.register (ApplicationConFig.Class); // Die Container anwenden (diese Konfigurationsklassen anwenden) context.refresh (); config = context.getBean (applicationConfig.class); AssertNotNull (config);
Sie können auch mehrere Konfigurationsklassen in einer Konfigurationsklasse über @import zusammenstellen und dann einfach die zusammengesetzte Konfigurationsklasse registrieren, um den Container zu starten:
@Configuration @import (systemconfig.class) public class applicationConfig2 {@autowired Private SystemConfig SystemConfig; @Bean öffentlicher BehördeService AuthorityService () {AuthorityService Service = New AuthorityService (); service.setUserdao (SystemConfig.Userdao ()); service.setDeptdao (SystemConfig.Deptdao ()); Rückgabeservice; }}Unit -Tests:
AnnotationConFigApplicationContext context = new AnnotationConFigApplicationContext (ApplicationConFig2.Class); ApplicationConfig2 config = context.getBean (ApplicationConfig2.Class); config.AuthorityService (); Assertnotnull (AuthorityService.getDeptdao ());
2.2 Verwenden von XML -Dateien, um auf die Konfiguration der @Configuration -Klasse zu verweisen
Die mit @Configuration gekennzeichnete Konfigurationsklasse ist ebenfalls eine Bean, daher kann sie auch nach Spring's <Kontext: Komponenten-Scan> gescannt werden. Wenn Sie die Konfigurationsklasse in der XML-Konfigurationsdatei zusammenstellen und die Spring durch die XML-Konfigurationsdatei starten möchten, müssen Sie die entsprechende Konfigurationsklasse nur über <Kontext: Komponenten-scan> in XML scannen.
<Kontext: Komponenten-scan-Basis-Package = "net.deniro.spring4.conf" Ressourcenpattern = "ApplicationConfig2.Class" />
2.3 Konfiguration der Referenz -XML -Dateien in der @Configuration -Klasse
In der Konfigurationsklasse @Configuration können Sie XML -Konfigurationsdateien direkt über @ImporTresource einführen, damit Sie direkt auf die in der XML -Konfigurationsdatei definierten Bohnen über @Autowired verweisen können.
Konfigurationsdatei:
<bean id = "GroupDao"/> <bean id = "roledao"/>
@Configuration Klasse:
@Importresource ("ClassPath: beans5-11.xml") @configurationPublic class serviceConfig {@bean @autowired public relationsservice relationsservice (GroupDao GroupDao, Roledao Roledao) {relationsservice service = new relationsservice (); service.setGroupdao (GroupDao); service.setroledao (roledao); Rückgabeservice; }}Unit -Tests:
AnnotationConfigapplicationContext context = new AnnotationConFigApplicationContext (serviceConfig.class); serviceConfig config = context.getBean (servICECONFIG.CLASS); Kontext .getbean ("roledao"));Solange diese Definitionsinformationen verschiedener Bohnenformen in Federbehälter geladen werden können, kann die Feder die Montage zwischen Bohnen intelligent vervollständigen.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.