Die Beziehung zwischen Bohnen- und Frühlingsbehälter
Bean -Konfigurationsinformationen definieren die Implementierung und Abhängigkeiten von Beans. Spring Container legt die Bean -Definitionsregistrierung innerhalb des Containers auf der Grundlage verschiedener Formen von Bean -Konfigurationsinformationen fest, lädt und instanziiert Beans gemäß der Registrierung und legt Abhängigkeiten zwischen Bohnen und Bohnen fest. Schließlich werden diese fertigen Bohnen im Bohnen -Cache -Pool platziert, damit externe Anwendungen anrufen können.
In diesem Artikel werden Sie ausführlich über die Verwendung von Codierungsmethoden zur dynamischen Konfiguration von Bohnen im Frühjahr vorgestellt. Wir werden sie für Ihre Referenz und Ihr Lernen teilen. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung zusammen an.
1 StandardListableBeanFactory
StandardListableBeanFactory implementiert die konfigurablistableBeanFactory -Schnittstelle, die Bohnen durch diese Klasse dynamisch injizieren kann. Um sicherzustellen, dass die injizierte Bean auch durch AOP verbessert werden kann, müssen wir die Werks -Postprozessor -Schnittstelle der Bean implementieren.
Bohnen, die eine dynamische Injektion erfordern:
Public Class BookService {Bookdao Bookdao; public void setbookdao (bookdao bookdao) {this.bookdao = bookDao; } public bookdao getbookdao () {return bookDao; }}Implementierung der Fabrik -Postprozessor -Schnittstelle der Bean:
@ComponentPublic Class BookServiceFactoryBean implementiert beanfactoryPostProcessor (public void postProcessbeanFactory (configurablelistableBeanFactory beanfactory) löscht beansexception {defaultLableableBeAnfactory Factory = (standardLyTlistableBeanFactory) Beanfactory; // Bean Definition beandefinitionbuilder builder = beandefinitionbuilder.genericbeandefinition (bodeService.class); // Setzen Sie den Property Builder.addpropertyReference ("Bookdao", "Bookdao"); // BEAN -Definition registrieren. // Bean -Instanzfabrik registrieren. }}Hier wird angenommen, dass Bookdao in den Container (XML- oder Annotationsmethode) injiziert wurde.
Hier können wir die Definition einer Bean registrieren oder die Instanz einer Bean direkt registrieren.
Konfiguration:
<Context: component-scan base-package = "net.deniro.spring4.dynamic" />
Unit -Tests:
BookService BookService1 = (BookService) context.getbean ("BookService1"); Assertnotnull (BookService1);2 benutzerdefinierte Tags
Um Komponenten besser zu verkapulieren und ihre Benutzerfreundlichkeit zu verbessern, definieren wir Komponenten als Etiketten.
Die Schritte zum Anpassen des Tags sind:
Erstellen Sie Bookeservice.xsd unter dem Schemaordner in Ressourcen
<? xmlns:beans="http://www.springframework.org/schema/beans" targetNamespace="http://www.deniro.net/schema/service" elementFormDefault="qualified" attributeFormDefault="unqualified" > <!-- Import beans Namespace --> <xsd:import namespace="http://www.springframework.org/schema/beans"/> <!-- Define book-service tag--> <xsd:element name="book-service"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="beans:identifiedType"> <!-- Define dao attribute--> <xsd: Attribut name = "dao" type = "xsd: string" use = "fordert"/> </xsd: Erweiterung> </xsd: complexContent> </xsd: complexType> </xsd: element> </xsd: schema>
Definieren Sie dann den Service -Tag -Parser:
Public Class BookeservicedefinitionParser implementiert BeanDefinitionParser {public beandefinition analyse (Elementelement, ParserContext ParsereContext) {// Bean Definitionbeandefinitionbuilder Builder = BeanDefinitionBuilder.genericbeanDeFinition (Bookeservice.clument); // Injizieren Sie benutzerdefinierte Tag -Attribut -String DAO = element.getAttribute ("dao"); builder.addpropertyReference ("bookdao", dao); // BEAN registrieren ParserContext.registerBeanComponent (New BeanComponentDefinition (Builder .GetraWbeandeFinition (), "BookService")); null zurückkehren; }}Registrieren Sie dann den Parser, den Sie gerade im Namespace definiert haben:
Public Class BookServiceNameSpaceHandler erweitert namespaceHandlersupport {public void init () {RegisterBeanDefinitionParser ("Book-Service", New BookeservicedefinitionParser ()); }}Erstellen Sie dann den META-INF-Ordner in Ressourcen und erstellen Sie Spring.Schemas und Spring.Handler, mit denen der Dokumentstrukturdateiweg des benutzerdefinierten Tags und den Parser konfiguriert werden, der den benutzerdefinierten Namespace analysiert.
Dateipfad
Spring.Handlers:
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicespaceHandler
Spring.Schemas:
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
Hinweis: Die XSD -Datei muss im Descendants -Ressourcenverzeichnis platziert werden.
Zitat benutzerdefinierte Tags:
<? xmlns: me = "http://www.deniro.net/schema/service" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframe.orge/ http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <me: book-da =" bookDao "/> </> </beans>
Hier haben wir das benutzerdefinierte Tag am Kopf verwiesen und es "Me" genannt, und dann können wir es o (∩__∩) o ~ verwenden
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.