BeanInfo-Generierung via Annotations

vorhergehende Artikel in: Java Komponenten OpenSource
05.01.2018

Nachdem ich mich von Netbeans als IDE losgesagt und Idea in der Community Edition zugewandt habe, vermisste ich eigentlich nur eins: den schönen clicky-bunty-Editor für BeanInfo-Klassen. Daher die Idee, so etwas über Annotations zu realisieren...

Die bisherige Lösung dafür war eher eine Krücke - sie erzeugte zwar eine BeanInfo-Klasse, allerdings war diese nur wenig mehr als ein Skelett. Danach war noch einige Handarbeit angesagt, damit eine sinnvolle BeanInfo daraus wurde. Aber noch erschwerender war sicher die Tatsache, dass man eine einmal generierte und angepasste BeanInfo davor schützen musste, dass noch einmal "drüber generiert" wird - dadurch wären nämlich alle Anpassungen verlorengegangen.

Das ist besonders in Fällen hinderlich, in denen einer Bean neue Properties hinzugefügt werden: Dann muss man entweder die bestehende BeanInfo doch von Hand weiterpflegen oder nochmals generieren und darauf hoffen, dass man die händisch vorgenommenen Anpassungen durch ein kompetentes Merge-Werkzeug in die neue BeanInfo übernehmen kann.

Das Ziel musste also sein, die BeanInfo-Annotations so zu erweitern, dass alle Aspekte in einer BeanInfo-Klasse über Annotations abbildbar waren. Diese Aspekte mussten dann in einem weitaus umfassenderen Velocity-Template berücksichtigt und umgesetzt werden. Damit erübrigt sich jegliche Anpassung der generierten BeanInfo.

Damit dies wirklich so bleibt, wurde ein wenig weiter gedacht: Die BeanInfos sind inhärent multilingual: Es ist möglich, ein ResourceBundle anzugeben, das in der generierten BeanInfo benutzt wird. An allen Stellen, an denen ein String erwartet wird, kann per Annotation-Attribut auch ein String genutzt werden, der ein gültiges Java-Quelltextfragment darstellt und nach Auswertung einen String ergibt. Bestes Beispiel dafür ist die Internationalisierung: statt "huhu" kann man einfach schreiben:

i18n.getString("huhu");

Dieser Code wird an der entsprechenden Stelle in die BeanInfo generiert und erzeugt dann einen String, statt das vorgegebene StringLiteral nutzen zu müssen.

Eine weitere Facette dient der Abrundung: In einigen Positionen der BeanInfo-Klasse ist ein Exception-Handling nötig: dafür existiert ein weiteres Annotation-Attribut, das ebenfalls wieder ein gültiges Java-Quelltextfragment enthalten muss - in diesem Fall wird es statt des Standard-Exception-Handling eingesetzt.

Alle benötigten Klassen und Ressourcen werden in einem Github-Repository veröffentlicht werden.

Ein Ausblick sei an dieser Stelle noch gestattet: Es wäre schön, wenn man aus den Annotations Runtime-Annotations machen könnte: dann wäre es möglich, ohne BeanInfo generieren zu müssen die BeanInfo über eine Introspector-Fassade direkt zur Laufzeit zu erzeugen.

Aktualisierung vom 5. Januar 2018

Das versprochene GitHub-Repository wurde eingerichtet.

Artikel, die hierher verlinken

BeanInfo durch Runtime-Annotations feature-complete und in Bälde Open Source

12.11.2023

Ich habe vor geraumer Zeit laut darüber nachgedacht, dass die Realisierung der BeanInfos in einer separaten Klasse zu aufwendig und fehleranfällig ist. Ich habe dann zunächst eine Variante implementiert, bei der die BeanInfo nicht mehr manuell gepflegt werden musste, sondern aus Annotations generiert wurde.

Maven-Archetype für dWb+ Module

16.04.2018

Nachdem ich bereits ein GitHub-Repository für die Beispiele aus dem Kochbuch für dWb+ veröffentlicht habe, folgt nun hier ein Archetype zur entwicklung eigener Module

GitHub Repository für BeanInfo Generator

21.01.2018

Wie bereits in einem früher veröffentlichten Artikel angekündigt wurden die Dateien zur Erzeugung vollständiger BeanInfos in einem GitHub-Repository veröffentlicht.

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Ticketsysteme sind lebende Wesen

    29.03.2020

    Hier zunächst wieder eine Triggerwarnung: Dieser Artikel wird meine Meinung abbilden. es kann sein, dass sie dem einen oder anderen nicht gefällt - das ist mir aber egal. Und wenn hier irgendwelche Schneeflocken mitlesen, dann sind die selber schuld.

    Weiterlesen...

Neueste Artikel

  • Weitere Experimente mit dem Clifford-Attractor

    Ich berichtete hier bereits über Experimente mit dem Clifford-Attractor, allerdings war ich noch Experimente unter geringfügig geänderten Parametern schuldig...

    Weiterlesen
  • Neues Feature in meinem Static Site Generator: externe URLs

    Es wurde wieder einmal Zeit für ein neues Feature in meinem Static Site Generator mittels dessen ich ja auch meine Heimatseite im Zwischennetz gestalte und verwalte...

    Weiterlesen
  • Eine Bestandsaufnahme

    Es kamen mehrere Faktoren zusammen: die Tatsache, dass ich nicht mehr ganz so kürzlich die 50 überschritten habe hatte ebenso darauf Einfluss wie das heutige trübe Wetter und auch der Fakt, dass ich bereits beinahe alle Wochenendpflichten erledigt habe. Der letzte Stein des Anstoßes war dann aber, dass sich heute zum 125. Mal der Geburtstag von Erich Fromm jährt.

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.