{"id":419,"date":"2009-11-03T19:19:00","date_gmt":"2009-11-03T19:19:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=419"},"modified":"2009-11-03T19:19:00","modified_gmt":"2009-11-03T19:19:00","slug":"bean-zustande-kopieren","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/11\/bean-zustande-kopieren\/","title":{"rendered":"Bean-Zust\u00e4nde kopieren"},"content":{"rendered":"<p>In mehrschichtigen Anwendungen gibt es oft das Muster, dass eine JavaBean etwa \u00fcber eine Objekt-Relationale-Mapping-Technologie automatisch aus einer Datenbankzeile aufgebaut wird und dann internen in der Gesch\u00e4ftsschicht verwendet wird. Soll nun diese Information \u00fcber das Netzwerk an einen anderen Rechner verteilt werden, ist es nicht immer angebracht, diese JavaBean etwa direkt \u00fcber Serialisierung zu versenden. Stattdessen kann ein Transfer-Objekt aufgebaut werden, eine spezielle JavaBean zum Beispiel, sodass der Empf\u00e4nger keine Abh\u00e4ngigkeit zu der Bean in der internen Gesch\u00e4ftsschicht hat. Nun werden sich aber diese Gesch\u00e4ftsschicht-Bean und Transfer-Bean sehr \u00e4hnlich sein und viele Entwickler scheuen die M\u00fche, l\u00e4stigen Kopiercode zu erstellen. Doch manuelle Arbeit ist nicht n\u00f6tig und eine L\u00f6sung&nbsp; f\u00fcr das Kopierproblem ist \u00fcber Refection schnell geschrieben. \u00dcber die BeanInfo kommen wir an den PropertyDescriptor (siehe dazu \u201eProperties einer Bean erfragen\u201c) und dann liefern getReadMethod() und getWriteMethod() die Setter\/Getter. Bei einer eigenen Kopiermethode wie copyProperties(Object source, Object target) m\u00fcssen wir bei der Quell-Bean jede Property auslesen und entsprechend beim Ziel-Bean nach der Property suchen und den Setter aufrufen. Wenn das ganze ohne Typkonvertierungen programmiert werden soll, sind es nur wenige Zeilen Programmcode. Kommen einfache Konvertierungen dazu, etwa wenn einmal ein Wrapper als Property-Typ genutzt wird und einmal der primitive Datentyp, ist es etwas mehr.<br \/>Der Aufwand mit einer eigenen Implementierung ist allerdings nicht n\u00f6tig, denn zwei popul\u00e4re Implementierungen k\u00f6nnen helfen:<br \/>\u2022&nbsp;&nbsp;&nbsp; Apache Commons BeanUtils (http:\/\/commons.apache.org\/beanutils\/). Die Klasse org.apache.commons.beanutils.BeanUtils bietet praktische statische Methoden wie copyProperty(Object bean, String name, Object value), copyProperties(Object dest, Object orig), Object &nbsp;&nbsp;&nbsp; cloneBean(Object bean) oder populate(Object bean, Map properties).<br \/>\u2022&nbsp;&nbsp;&nbsp; Dozer (http:\/\/dozer.sourceforge.net\/). Dozer bringt ausgefeilte Mapping-M\u00f6glichkeiten mit, die weit \u00fcber BeansUtils hinausgehen. Das geht soweit, dass es ein Eclipse-Plugin zur Konfiguration der Abbildungen gibt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In mehrschichtigen Anwendungen gibt es oft das Muster, dass eine JavaBean etwa \u00fcber eine Objekt-Relationale-Mapping-Technologie automatisch aus einer Datenbankzeile aufgebaut wird und dann internen in der Gesch\u00e4ftsschicht verwendet wird. Soll nun diese Information \u00fcber das Netzwerk an einen anderen Rechner verteilt werden, ist es nicht immer angebracht, diese JavaBean etwa direkt \u00fcber Serialisierung zu versenden. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-419","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=419"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/419\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}