Ich dekonstruieren, wie Frühling Java -Objekte mit einem einfachen Beispiel verwaltet.
Definieren Sie zunächst ein einfaches Pojo, der Code ist wie folgt:
package com.jvk.ken.spring;public class Demo {private String name;public Demo() {name="I'm Demo.";}public void printName() {System.out.println(name);}public void setName(String name) {this.name = name;}}Die entsprechende Federkonfigurationsdatei lautet wie folgt:
<? xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/Context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/beans http://www.spingframework.orge/sschema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> <bean id =" Demo "/> </beans>
Der einfache Testcode lautet wie folgt:
Paket com.jvk.ken.spring; import org.springframework.beans.factory.beanfactory; import org.springframework.beans.factory.xml.xmlbeanfactory; {testSpring ();} private statische void testspring () löst Ausnahme aus {beanfactory bf = new XmlbeanFactory (new classpathresource ("applicationContext.xml")); Demo bean = (Demo) bf.getbean ("Demo"); System.out.println (bean.getClass ()); bean.printname ();}}Führen Sie die Testklasse aus und geben Sie die folgenden Informationen aus, um anzuzeigen, dass ein einfaches Federbeispiel erfolgreich ausgeführt wurde.
2012-3-28 22:18:07 org.springframework.bean.factory.xml.xmlbeandefinitionReader LoadbeandeFinitions Informationen: Laden von XML-Bean-Definitionen aus der Klasse Pfadressource [ApplicationContext.xml] com.jvk.ken.sspring.demo ich.
Aus der kurzen Java -Code- und XML -Konfigurationsdatei können wir feststellen, dass XMLBeanFactory Javabean durch Lesen der XML -Konfigurationsdatei zusammenstellt und das erforderliche Objekt zurückgibt, wenn der Benutzer die GetBean -Methode aufruft. Um sein Verhalten nachzuahmen, definiere ich eine einfache Beanfaktor.
package com.jvk.ken.spring;import java.util.HashMap;import java.util.Map;public class MyBeanFactory {// Save the definition of bean Map<String, Class> beans = new HashMap<String, Class>();public Object getBean(String id) throws InstantiationException, IllegalAccessException {return Beans.get (id) .Newinstance ();} private String xmlfile; public mybeanFactory (String xmlfile) löst classNotFoundException {Super () aus; this.xmlFile = xmlFile; init ();} private void init () löst classNotFoundException {// initialisieren und analysieren Sie XML, die tatsächliche Analyse von XML wird hier weggelassen und verwenden Sie Hardcode, um system.out.Out.println ("Konfigurationsdatei:"+xmlFile); "com.jvk.ken.spring.demo"; class <?> loadClass = this.getClass (). getClassloader (). LoadClass (className); beans.put ("Demo", LoadClass);}}Der Testcode lautet wie folgt:
package com.jvk.ken.spring;public class Test {public static void main(String[] args) throws Exception {testNotSpring();}private static void testNotSpring() throws Exception {MyBeanFactory bf = new MyBeanFactory("applicationContext.xml");Demo bean = (Demo) bf.getbean ("Demo"); System.out.println (bean.getClass ()); bean.printname ();}}Nach dem Laufen werden die folgenden Informationen ausgegeben:
Konfigurationsdatei: applicationContext.xml Klasse com.jvk.ken.spring.demo Ich bin Demo.
Der obige kurze Code zeigt, wie der Frühling als einfachste Bean -Fabrik fungiert. Passen wir den Code leicht unten an, um zu analysieren, was im Frühjahr passiert. Ändern Sie zunächst die parameterlose Konstruktionsmethode der Demo -Klasse in privat.
private Demo () {name = "Ich bin Demo."; }Das Ausführen des Testcodes ergab, dass es keinen Unterschied in den Feder -Testergebnissen gab, aber meine angepasste MybeanFactory meldete die folgende Fehlermeldung:
Ausnahme in Thread "Main" java.lang.ILLEGALACACCESSException: Klasse com.jvk.ken.spring.mybeanfactory kann nicht auf ein Mitglied der Klasse com.jvk.ken.spring.demo mit Modifikatoren "privat" auf Sun.reflect.reflection.ensuremember (Reflection.java:65) zugreifen. java.lang.class.newinstance0 (class.java:349) unter java.lang.class.newinstance (class.java:308) unter com.jvk.ken.spring.mybeanfactory.getBean (mybeanfactory.java:12) at ATRECTORE. com.jvk.ken.spring.test.testnotspring (test.java:25) unter com.jvk.ken.spring.test.main (test.java:9)
Frühling ist so magisch? Nein, der Code, den ich schrieb, ist einfach zu einfach und kann direkt mit einer leichten Änderung ausgeführt werden.
öffentliches Objekt getBean (String -ID) löst Ausnahme aus {class class1 = beans.get (id); Konstruktor deklarierte constructor = class1.getDeclaredConstructor (); DeclaredConstructor.SetAccessible (wahr); Return DeclaredConstructor.Newinstance (); }Das obige ist der reinste Javabäer, der mit Frühlingsbehälter verwaltet wird. Der Frühling unterstützt auch eine andere Art von Bohne, die als Fabrikbohnen bezeichnet wird. Das Beispiel ist besser als tausend Wörter. Sehen Sie sich bitte den Code an
Paket com.jvk.ken.spring; import org.springframework.bean.factory.factoryBean; öffentliche Klasse Demofactory Implements FactoryBean {@Override public Object GetObject () löscht Ausnahme aus {return New Demo ();}@overside public boolan () {) {) {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{class) {{{class; FALSCH;}}Ändern Sie nach dem Hinzufügen der demofaktorischen Klasse die Federkonfigurationsdatei gleichzeitig
<bean id = "Demo" />
Die anderen Codes werden nicht geändert. Nach dem Ausführen des Testcodes sind die Ausgabergebnisse genau die gleichen wie zuvor. Warum ist die Klasse com.jvk.ken.spring.demofactory mit ID konfiguriert, aber das zurückgegebene Ergebnis ist eine Demo -Instanz? Dies liegt daran, dass der Frühling feststellt, dass demofaktorisch eine spezielle Bohne ist, die die FactoryBean -Schnittstelle implementiert. Die GetObject -Methode wird vor der Rückgabe des Ergebniss aufgerufen, sodass das Endergebnis das Demo -Objekt ist. Wenn wir wirklich die Werksbean bekommen müssen, können wir so bf.getbean ("& Demo") so schreiben.
Zusammenfassen
Das obige ist die detaillierte Erläuterung des Code für die Erstellung von Bean -Implementierungsobjekten für die Frühling -Implementierung. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!