{"id":14,"date":"2006-08-19T04:12:00","date_gmt":"2006-08-19T03:12:00","guid":{"rendered":"http:\/\/euve3303.vserver.de\/stefan\/blog\/?p=16"},"modified":"2011-12-02T20:34:27","modified_gmt":"2011-12-02T19:34:27","slug":"beanfactory-ala-spring","status":"publish","type":"post","link":"https:\/\/cogito-ergo-blog.de\/blog\/2006\/08\/19\/beanfactory-ala-spring\/","title":{"rendered":"BeanFactory ala Spring"},"content":{"rendered":"<p>Wenn man einmal die Vorteile einer BeanFactory ala Spring kennengelernt hat, will man deren Vorteile nicht mehr missen. Es ist einfach viel angenehmer &#8211; insbesondere auch im Hinblick auf die Testbarkeit &#8211; wenn man Klassen als POJOs entwirft, die Eigenschaften besitzen, die von aussen gesetzt werden (Dependency Injection). Nun will man aber nicht immer einen &quot;Container&quot; wie Spring bem\u00fchen, selbst wenn Spring modular aufgebaut ist und leicht die Verwendung nur von Teilen erlaubt. Konkret wollte ich Dependency Injection sogar gerne in einem Appet nutzen, wof\u00fcr mir Spring zu gross erschien. Ergebnis war eine eigene kleine &quot;BeanFactory&quot; ala Spring &#8230; <!--more--><\/p>\n<p>Die Features welche ich in typischen Anwendungen brauche:<\/p>\n<ul>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Konfiguration \u00fcber Config-Datei (vorzugeweise XML).<\/font><\/li>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Zuweisen von Properties<\/font><\/li>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Zuweisen von Referenzen auf andere Beans<\/font><\/li>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Beans als Singleton<\/font><\/li>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Init-Methode nach dem Setzen der Properties<\/font><\/li>\n<li><font style=\"BACKGROUND-COLOR: #faffff\">Die Factory selbst als Singleton<\/font><\/li>\n<\/ul>\n<p>Alle diese Features sind in der einfachen Klasse &quot;SimpleBeanFactory&quot; realisiert:<\/p>\n<blockquote style=\"BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; FONT-SIZE: 85%; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: courier new; HEIGHT: 300px; BACKGROUND-COLOR: rgb(238,238,238)\"><p>\n<tt class=\"java\"><span class=\"java4\">package <\/span><span class=\"java10\">com.rinke.solutions.beans;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.beans.PropertyDescriptor;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.beans.PropertyEditor;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.beans.PropertyEditorManager;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.io.InputStream;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.lang.reflect.Method;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.util.ArrayList;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.util.HashMap;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.util.List;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">java.util.Map;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">javax.xml.parsers.SAXParser;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">javax.xml.parsers.SAXParserFactory;<\/p>\n<p><\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.xml.sax.Attributes;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.xml.sax.SAXException;<br \/>\n<\/span><span class=\"java4\">import <\/span><span class=\"java10\">org.xml.sax.helpers.DefaultHandler;<\/p>\n<p><\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n &#42; simple bean factory.<br \/>\n &#42; <\/span><span class=\"java11\">@author <\/span><span class=\"java14\">sr<br \/>\n &#42;\/<br \/>\n<\/span><span class=\"java4\">public class <\/span><span class=\"java10\">SimpleBeanFactory <\/span><span class=\"java4\">extends <\/span><span class=\"java10\">DefaultHandler <\/span><span class=\"java8\">{<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; stores singletons<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private <\/span><span class=\"java10\">Map&lt;String, Object&gt; singletons = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">HashMap&lt;String, Object&gt;<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; stores bean definitions<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private <\/span><span class=\"java10\">Map&lt;String, BeanDefinition&gt; beanDefs = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">HashMap&lt;String, BeanDefinition&gt;<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;&#xA0; state of parser<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private <\/span><span class=\"java10\">String aktbean;<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; part of bean definition: a setter call for init. <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@author <\/span><span class=\"java14\">sr<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private class <\/span><span class=\"java10\">SetterCall <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; setter to call.<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">Method setter;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; immediate value to set.<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">Object value;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; alternatively: bean ref to set.<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">String ref;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; ctor using fields<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@param <\/span><span class=\"java14\">setter setter method to call<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@param <\/span><span class=\"java14\">value value to set<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@param <\/span><span class=\"java14\">ref or bean ref to set<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public <\/span><span class=\"java10\">SetterCall<\/span><span class=\"java8\">(<\/span><span class=\"java10\">Method setter, Object value, String ref<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.setter = setter;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.value = value;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.ref = ref;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; }<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; bean definition consists of singleton flag, class, optional init method<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; and a list of setter calls for initialization.<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@author <\/span><span class=\"java14\">sr<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private class <\/span><span class=\"java10\">BeanDefinition <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java9\">boolean <\/span><span class=\"java10\">isSingleton;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; Class clazz;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; Method initMethod;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; List&lt;SetterCall&gt; inits = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">ArrayList&lt;SetterCall&gt;<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public <\/span><span class=\"java10\">BeanDefinition<\/span><span class=\"java8\">(<\/span><span class=\"java9\">boolean <\/span><span class=\"java10\">isSingleton, Class clazz, Method initMethod<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.isSingleton = isSingleton;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.clazz = clazz;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">this<\/span><span class=\"java10\">.initMethod = initMethod;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; }<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; the factory singleton<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private static <\/span><span class=\"java10\">SimpleBeanFactory theInstance;<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; accessor for the factory<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@return <\/span><span class=\"java14\">the factory singleton<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public static <\/span><span class=\"java10\">SimpleBeanFactory getInstance<\/span><span class=\"java8\">() {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">theInstance == <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">theInstance = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">SimpleBeanFactory<\/span><span class=\"java8\">(<\/span><span class=\"java10\">SimpleBeanFactory.<\/span><span class=\"java4\">class<\/span><span class=\"java10\">.getResourceAsStream<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;\/context.xml&#34;<\/span><span class=\"java8\">))<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">return <\/span><span class=\"java10\">theInstance;<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; ctor using input stream<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@param <\/span><span class=\"java14\">is<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public <\/span><span class=\"java10\">SimpleBeanFactory<\/span><span class=\"java8\">(<\/span><span class=\"java10\">InputStream is<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">parse<\/span><span class=\"java8\">(<\/span><span class=\"java10\">is<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; parser handler<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@see <\/span><span class=\"java14\">org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java16\">@Override<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public <\/span><span class=\"java9\">void <\/span><span class=\"java10\">startElement<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String uri, String localName, String qName,<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; Attributes attributes<\/span><span class=\"java8\">) <\/span><span class=\"java4\">throws <\/span><span class=\"java10\">SAXException <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if <\/span><span class=\"java8\">(<\/span><span class=\"java10\">qName.equals<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;bean&#34;<\/span><span class=\"java8\">)) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">aktbean = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;id&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">beanDefs.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">aktbean<\/span><span class=\"java8\">) <\/span><span class=\"java10\">!= <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">throw new <\/span><span class=\"java10\">IllegalArgumentException<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;duplicate bean name &#34; <\/span><span class=\"java10\">+ aktbean<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">String classname = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;class&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; String initMethodName = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;init-method&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; Method initMethod = <\/span><span class=\"java4\">null<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">initMethodName != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">initMethod = Class.forName<\/span><span class=\"java8\">(<\/span><span class=\"java10\">classname<\/span><span class=\"java8\">)<\/span><span class=\"java10\">.getMethod<\/span><span class=\"java8\">(<\/span><span class=\"java10\">initMethodName,new Class<\/span><span class=\"java8\">[]{})<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">Class clazz = Class.forName<\/span><span class=\"java8\">(<\/span><span class=\"java10\">classname<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; beanDefs.put<\/span><span class=\"java8\">(<\/span><span class=\"java10\">aktbean, <\/span><span class=\"java4\">new <\/span><span class=\"java10\">BeanDefinition<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;true&#34;<\/span><span class=\"java10\">.equals<\/span><span class=\"java8\">(<\/span><span class=\"java10\">attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;singleton&#34;<\/span><span class=\"java8\">))<\/span><span class=\"java10\">,<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; clazz,initMethod<\/span><span class=\"java8\">))<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">} <\/span><span class=\"java4\">else if <\/span><span class=\"java8\">(<\/span><span class=\"java10\">qName.equals<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;property&#34;<\/span><span class=\"java8\">)) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">String name = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;name&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; PropertyDescriptor pd = <\/span><span class=\"java4\">new <\/span><span class=\"java10\">PropertyDescriptor<\/span><span class=\"java8\">(<\/span><span class=\"java10\">name, beanDefs.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">aktbean<\/span><span class=\"java8\">)<\/span><span class=\"java10\">.clazz<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java3\">\/\/ has it a value<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">String value = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;value&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">value != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">PropertyEditor pe = PropertyEditorManager.findEditor<\/span><span class=\"java8\">(<\/span><span class=\"java10\">pd.getPropertyType<\/span><span class=\"java8\">())<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; pe.setAsText<\/span><span class=\"java8\">(<\/span><span class=\"java10\">value<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; beanDefs.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">aktbean<\/span><span class=\"java8\">)<\/span><span class=\"java10\">.inits.add<\/span><span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">SetterCall<\/span><span class=\"java8\">(<\/span><span class=\"java10\">pd.getWriteMethod<\/span><span class=\"java8\">()<\/span><span class=\"java10\">,pe.getValue<\/span><span class=\"java8\">()<\/span><span class=\"java10\">,null<\/span><span class=\"java8\">))<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java3\">\/\/ has it a reference (must already defined).<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">String ref = attributes.getValue<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;ref&#34;<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">ref != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">beanDefs.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">aktbean<\/span><span class=\"java8\">)<\/span><span class=\"java10\">.inits.add<\/span><span class=\"java8\">(<\/span><span class=\"java4\">new <\/span><span class=\"java10\">SetterCall<\/span><span class=\"java8\">(<\/span><span class=\"java10\">pd.getWriteMethod<\/span><span class=\"java8\">()<\/span><span class=\"java10\">,null,ref<\/span><span class=\"java8\">))<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; }<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; } <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">Exception e<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">throw new <\/span><span class=\"java10\">IllegalArgumentException<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;exception parsing bean &#34; <\/span><span class=\"java10\">+ aktbean, e<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; }<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java3\">\/\/ merge get \/ create<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">public <\/span><span class=\"java10\">Object getBean<\/span><span class=\"java8\">(<\/span><span class=\"java10\">String id<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">singletons.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">id<\/span><span class=\"java8\">) <\/span><span class=\"java10\">!= <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">return <\/span><span class=\"java10\">singletons.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">id<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">} <\/span><span class=\"java4\">else <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">BeanDefinition def = beanDefs.get<\/span><span class=\"java8\">(<\/span><span class=\"java10\">id<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; Object bean = <\/span><span class=\"java4\">null<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">bean = def.clazz.newInstance<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">for <\/span><span class=\"java8\">(<\/span><span class=\"java10\">SetterCall call : def.inits<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">Object v = call.value != <\/span><span class=\"java4\">null <\/span><span class=\"java10\">? call.value : getBean<\/span><span class=\"java8\">( <\/span><span class=\"java10\">call.ref <\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; call.setter.invoke<\/span><span class=\"java8\">(<\/span><span class=\"java10\">bean,new Object<\/span><span class=\"java8\">[] {<\/span><span class=\"java10\">v<\/span><span class=\"java8\">})<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">def.initMethod != <\/span><span class=\"java4\">null <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">def.initMethod.invoke<\/span><span class=\"java8\">(<\/span><span class=\"java10\">bean,new Object<\/span><span class=\"java8\">[]{})<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; } <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">Exception e<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">throw new <\/span><span class=\"java10\">IllegalArgumentException<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;error creating bean &#34;<\/span><span class=\"java10\">+ id,e<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">if<\/span><span class=\"java8\">( <\/span><span class=\"java10\">def.isSingleton <\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">singletons.put<\/span><span class=\"java8\">(<\/span><span class=\"java10\">id,bean<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">return <\/span><span class=\"java10\">bean;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<br \/>\n&#xA0;&#xA0;&#xA0; }<\/p>\n<p>&#xA0;&#xA0;&#xA0; <\/span><span class=\"java14\">\/&#42;&#42;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; parse config and init factory instance.<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42; <\/span><span class=\"java11\">@param <\/span><span class=\"java14\">is<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0; &#42;\/<br \/>\n&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">private <\/span><span class=\"java9\">void <\/span><span class=\"java10\">parse<\/span><span class=\"java8\">(<\/span><span class=\"java10\">InputStream is<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">try <\/span><span class=\"java8\">{<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java10\">SAXParser parser = SAXParserFactory.newInstance<\/span><span class=\"java8\">()<\/span><span class=\"java10\">.newSAXParser<\/span><span class=\"java8\">()<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; parser.parse<\/span><span class=\"java8\">(<\/span><span class=\"java10\">is, <\/span><span class=\"java4\">this<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">} <\/span><span class=\"java4\">catch <\/span><span class=\"java8\">(<\/span><span class=\"java10\">Exception e<\/span><span class=\"java8\">) {<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java4\">throw new <\/span><span class=\"java10\">IllegalArgumentException<\/span><span class=\"java8\">(<\/span><span class=\"java5\">&#34;parser error&#34;<\/span><span class=\"java10\">,e<\/span><span class=\"java8\">)<\/span><span class=\"java10\">;<br \/>\n&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; <\/span><span class=\"java8\">}<\/p>\n<p>&#xA0;&#xA0;&#xA0; }<\/p>\n<p>}<\/span><\/tt>\n<\/p><\/blockquote>\n<p>Die Syntax der Konfiguration ist einfach und entspricht weitgehend der von Spring. Ein Bespiel erl\u00e4utert alle wesentlichen Elemente:<\/p>\n<pre><font color=\"#0000ff\">&lt;<\/font><font color=\"#800000\">beans<\/font><font color=\"#0000ff\">&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0 &lt;<\/font><font color=\"#800000\">bean<\/font><font color=\"#ff0000\"> id<\/font><font color=\"#0000ff\">=&quot;<\/font>bean1<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> class<\/font><font color=\"#0000ff\">=&quot;<\/font>test.MyMessageBean<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> singleton<\/font><font color=\"#0000ff\">=&quot;<\/font>true<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> init-method<\/font><font color=\"#0000ff\">=&quot;<\/font>init<font color=\"#0000ff\">&quot;&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0\u00a0\u00a0 &lt;<\/font><font color=\"#800000\">property<\/font><font color=\"#ff0000\"> name<\/font><font color=\"#0000ff\">=&quot;<\/font>message<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> value<\/font><font color=\"#0000ff\">=&quot;<\/font>Hello World<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> <\/font><font color=\"#0000ff\">\/&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0 &lt;\/<\/font><font color=\"#800000\">bean<\/font><font color=\"#0000ff\">&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0 &lt;<\/font><font color=\"#800000\">bean<\/font><font color=\"#ff0000\"> id<\/font><font color=\"#0000ff\">=&quot;<\/font>bean2<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> class<\/font><font color=\"#0000ff\">=&quot;<\/font>test.Sender<font color=\"#0000ff\">&quot;&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0\u00a0\u00a0 &lt;<\/font><font color=\"#800000\">property<\/font><font color=\"#ff0000\"> name<\/font><font color=\"#0000ff\">=&quot;<\/font>message<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> ref<\/font><font color=\"#0000ff\">=&quot;<\/font>bean1<font color=\"#0000ff\">&quot;<\/font><font color=\"#ff0000\"> <\/font><font color=\"#0000ff\">\/&gt;<\/font><br\/><font color=\"#0000ff\">\u00a0 &lt;\/<\/font><font color=\"#800000\">bean<\/font><font color=\"#0000ff\">&gt;<br \/>&lt;\/<\/font><font color=\"#800000\">beans<\/font><font color=\"#0000ff\">&gt;<\/font><\/pre>\n<p>Das Beispiel ist f\u00fcr Spring Kenner selbsterkl\u00e4rend. Es werden genauso wie bei Spring PropertyEditors benutzt, um vom String zum Object zu kommen, d.h. wann immer ein PropertyEditor registriert ist, kann der Wert im Value-Attribut\u00a0verarbeitet werden.<\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man einmal die Vorteile einer BeanFactory ala Spring kennengelernt hat, will man deren Vorteile nicht mehr missen. Es ist einfach viel angenehmer &#8211; insbesondere auch im Hinblick auf die Testbarkeit &#8211; wenn man Klassen als POJOs entwirft, die Eigenschaften &hellip; <a href=\"https:\/\/cogito-ergo-blog.de\/blog\/2006\/08\/19\/beanfactory-ala-spring\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/14"}],"collection":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":1,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":10006,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions\/10006"}],"wp:attachment":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}