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

  • Precision Time Protocol

    15.10.2021

    Durch meinen Neffen wurde ich neulich auf ein Video im Internet aufmerksam gemacht, aus dem ich von der Existenz des Protokolls PTP oder Precision Time Protocol erfuhr. Hier einige Gedanken dazu

    Weiterlesen

Neueste Artikel

  • Präsentation zum Thema: Certificate and Signature Use Cases

    Eine Präsentation, die einige der Gesichtspunkte beleuchtet, die man beachten sollte, wenn man sich für elektronische Signaturen und Zertifikate in der eigenen Anwendung entscheidet. Weiterhin werden Möglichkeiten zur Benutzung aufgezeigt, die etwas weiter vom Mainstream entfernt sind.

    Weiterlesen
  • LinkCollections 2026 XI

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2026 folgt hier gleich die nächste:

    Weiterlesen
  • HexInspector Komponente in Java

    Als ich diese Lösung zur Darstellunbg und Analyse von beliebigen strukturierten Daten fand (das Beispiel erledigt das für ASN.1 kodierte Informationen), fasste ich den Entschluss, dass ich eine entsprechende Komponente in Java realisieren wollte.

    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.